OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4978|回复: 2

<新手向>第二期 裸机开发 P23-P24 第13讲 按键输入实验 随堂笔记

[复制链接]

5

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-3-22
在线时间
35 小时
发表于 2020-3-23 22:25:29 | 显示全部楼层 |阅读模式
/********************************************/
时间        :2020/03/22/
作者        :YOKI
导师        :正点原子 左忠凯
硬件        :正点原子 ALPHA I.MX LINUX 开发板
/*******************************************/
本例程通过编写 按键输入实验 练习 GPIO 口的输入设置(其实和输出差别不大)
GPIO1->GDIR &= ~(1<<0);      //GDIR 置 0 输入模式
GPIO1->GDIR |=  (1<<0);        //GDIR 置 1 输出模式
/**按键初始化函数**/
/******************************************************************************************************
   查看原理图 key与 核心板 GPIO1_IO18 相连 该引脚也是 UART1_CTS_B 因此要对该口进行复用设置查看 fsl_iomuxc.h 搜索 GPIO1_IO18
   #define IOMUXC_UART1_CTS_B_GPIO1_IO18     0x020E008CU, 0x5U, 0x00000000U, 0x0U, 0x020E0318U
   使用 IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18,0);函数进行复用
   宏定义 IOMUXC_UART1_CTS_B_GPIO1_IO18 各值的具体含义如下:
   0x020E008C     IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B  也就是 功能复用寄存器 地址
   0x5            对该寄存器写入的值 (1010) 查询IMX6ULL参考手册 可知该值含义:将该引脚复用为 GPIO1
   0x00000000U, 0x0U,  无意义 (未执行任何有效操作)
   0x020E0318     IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B  也就是 电气配置寄存器 地址
   函数 IOMUXC_SetPinMux(),最后一个(第五个)参数: 0  未对 IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B 进行配置
*******************************************************************************************************/
/***********************************电气属性设置*********************************************************
IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0x1F080);
最后一个参数: OXF080 对 IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B 进行配置
0XF080各位含义如下:
bit0:        0      低压摆率(边延变化时间)
bit1-2:      00     系统保留位
bit5-bit3:   000    关闭输入驱动
bit7-bit6:   10     中速 100M Hz
bit10-bit8:  000    系统保留位
bit11:       0      开路输出关闭
bit12:       1      输出后 pull/keeper  使能
bit13:       1      关闭 保持 keepr 选择 拉高/低 pull
bit15-bit14: 11     22K 上拉
bit16:       1      HYS 使能位(磁滞电路)  开启(滤波/消抖)
bit31-bit17: 全0    系统保留位
计算得 (1 1111 0000 1000 0000)=0X1F080
**************************************************************************************************/
我在写 IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0x1F080);
时给的最后一个参数和 视频中不一样 视频给的是 0XF080
而我给的是 0X1F080,前面多给了个1 也就是 第16位 HYS 被我开启了
原因是 HYS 表示 Hysteresis(磁滞电路)再查看 IMX6ULL 参考手册后发现 磁滞电路的作用是消除纹波(滤波)
也就是说开启了 HYS 滤波电路后可以由芯片自身去滤波,而按键抖动的本质也就是 由按键抖动产生的 纹波 所以开启 HYS 可以起到 消抖 作用。
本讲视频中实验的重点在最后部分,imx6.lds 链接脚本的修改
SECTIONS
{   . = 0X87800000;     //IMX6ULL 的汇编起始地址
    .text :
    {
        obj/start.o
        *(.text)
    }
   
    .rodata ALIGN(4) :{*(.rodata)}       //只读数据段(4字节对齐)
    .data ALIGN(4) : {*(.data)}          //数据段(4字节对齐)
    . = ALIGN(4);   
    __bss_start = . ;
    .bss ALIGN(4) : {*(.bss) *(COMMON)}  //bss段四字节对齐
    __bss_end = . ;
}
对比之前的链接脚本 在 第57行 (原文件的第11行)添加了一条语句:
. =ALIGN(4);
这条语句的作用是4字节对齐,加在 __bss_start = . 语句前
表示 __bss_start 的地址要进行四字节对齐,否则可能引起致命错误,
因为32位的芯片访问内存时是 以4字节为单位 访问
而程序的其实地址是以 0结尾 当你发现 __bss_start 的起始地址 不为 “ 0 4 8 C ” 为结尾时说明发生了这类错误,
对芯片来说在 错误读取内存 之后你的代码段都是发生了1~3位位移的,属于乱码!芯片不能正常执行。
而且该错误可能会随机发生(杀个程序员祭天?!)这是属于 小白劝退型 的错误,会让人抓狂!
当然 查坑方式 就是看 反汇编文件 xxx.dis ,左萌主 在这加上这条语句后可以帮我们 避坑
所以 左萌主 的视频里出现了翻车(>_<!)他在这里提前替我们踩了雷(*_*!) 非常感谢呢!
关于 imx6.lds 里的代码我一直都不太完全懂,所以没有好的注释,有没有大神帮助理解下???
最后留下一个疑问:
函数 IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18,0) 的第四个参数:
0x020E0318     IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B  也就是 电气配置寄存器 地址
这里已经把 IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B 写上去了
但是却在最后一个(第五个)参数写了0  未对 IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B 进行配置
假如直接写成下面这个语句:
IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18,0X1F080)
是否就完成了 IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B  也就是 电气配置寄存器 的配置?
也就不需要后面第二条语句来配置电气属性了
IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0x1F080);
大家自己验证以下吧
/**********************************************************************************************/
个人总结:  按键实验  
因为感觉 按键实验 比较简单,所以这个例程是我自己编写的,写完之后验证和视频里的例程对照,有点不一样,但是原理相同。
以上注释和代码都是在学习 《正点原子 linux 第二期 裸机开发视频 P23-P24 第13讲 按键输入实验程序》 过程中
跟着 左萌主 编写并加入了一点点自己的思考写成的,发出来跟大家一起记录学习
如果有帮助请大家自行参考、下载,如果 转载 请注明出处,并在论坛和我联系。如果有错误请大神指正!左萌主赛高!

作者        :YOKI
导师        :正点原子 左忠凯 (请允许我叫你一声导师吧)
硬件        :正点原子 ALPHA I.MX LINUX 开发板
/*********************************************************************************************/

7_key_bsp.rar

266.27 KB, 下载次数: 1

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2020-3-24 10:03:44 | 显示全部楼层
不错不错,非常好的学习笔记,跟我当年学习一样,都是边学习边记笔记,必须得支持!
回复 支持 反对

使用道具 举报

5

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-3-22
在线时间
35 小时
 楼主| 发表于 2020-3-24 22:08:25 | 显示全部楼层
zuozhongkai 发表于 2020-3-24 10:03
不错不错,非常好的学习笔记,跟我当年学习一样,都是边学习边记笔记,必须得支持!

左萌主亲自监督,那必须得好好学啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 07:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表