imx6ul 7之按键输入

本文详细介绍了在特定硬件平台上实现按键检测的方法,包括硬件连接、软件配置步骤及清除BSS段的正确做法。同时,提供了GPIO读写驱动的实现代码,并解决了编译警告问题。

一、hw原理图
的撒旦
按键key0接到了UART1_CTS , 默认情况下KEY0为高,当按下KEY0之后,UART1_CTS 为低

二、sw
1、设置UART1_CTS复用为GPIO1_IO18
2、设置UART1_CTS的电气属性
3、配置GPIO1_IO18为输入模式
4、读取按键值也就是GPIO1_IO18的高低电平

三、加上清除bss段,代码不运行
_bsss_start = 0x87800289。对于32位的soc,访问是以4字节访问的。因此从0x87800288开始,清除bss段。
然而0x87800288不属于bss段。所以需要对 _bss_start 进行4字节对齐。_bss_start应该等于0x8780028c

imx6ul.lds
点号(定点计数器)与等号之间
冒号两侧
最好都加上空格

SECTIONS{
    . = 0x87800000;
    .text :
    {
        obj/start.o
        *(.text)
    }
    .data ALIGN(4) : {*(.data)}
    .rodata ALIGN(4) : {*(.rodata)}
    . = ALIGN(4);                     <---------------设置定点计数器对齐
    __bss_start = .;
    .bss ALIGN(4) : {*(.bss) *(COMMON)}
    __bss_end = .;
}

此时可以看到 _bss_star t的地址是4字节对齐的达式

start.s
Warning: end of file not at end of a line; newline inserted
文件结尾留一个空行,即可解决该warning

.global _start
.global _bss_start
_bss_start :
    .word __bss_start
.global _bss_end 
_bss_end :
    .word __bss_end
_start:
    mrs r0,cpsr
    bic r0,r0,#0x1f
    orr r0,r0,#0x13
    msr cpsr,r0

    ldr r0,_bss_start
    ldr r1,_bss_end
    mov r2,#0
bss_loop:
    stmia r0!,{r2}
    cmp r0,r1
    ble bss_loop

    ldr sp,=0x80200000
    
    b main

gpio读写驱动

#include"bsp_gpio.h"
int gpio_pinread(GPIO_Type *base,int pin)
{
    return (((base->DR)>>pin) & 0x1);
}
void gpio_pinwrite(GPIO_Type *base,int pin,int value)
{
    if(value == 0)
    {
        base->DR &= (~(1<<pin));
    }
    else if(value == 1)
    {
        base->DR |= (1<<pin);
    }
}

void gpio_init(GPIO_Type *base,volatile int pin,gpio_pin_config *config)
{
    if(config->dir == kGPIO_DigitalInput)
    {
        base->GDIR &= (~(1<<pin));
    }
    else
    {
        base->GDIR |= (1<<pin);
        gpio_pinwrite(base,pin,config->outputLogic);
    }    
}

/dev/sdb 出现错误,就重启解决
定义一个结构体指针,在给它赋值,报错。要用malloc先分配空间,在p->member赋值
取消-O2优化编译 也没有问题的
\ + 字符 , 可以屏蔽掉这个字符的特殊效果,使其原样输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值