liminary1138学习手记
关于文件........................................................................................................................................... 2 1、Bit-band位操作 .......................................................................................................................... 2 2、中断............................................................................................................................................. 3
抢占优先级 ............................................................................................................................... 3 3、系统控制 ..................................................................................................................................... 5 4、定时器......................................................................................................................................... 5 5、模拟比较器COMP .................................................................................................................... 6 6、模数转换ADC ........................................................................................................................... 6 7、滴答定时器 ................................................................................................................................. 6 8、接口部分 ..................................................................................................................................... 7
(1)UART .............................................................................................................................. 7 (2)SSI ................................................................................................................................... 9 (3)I2C ................................................................................................................................. 10
经过这几天的学习,对比之前几天的stm32的学习(由于暂时缺少板子,临时改变,stm32看了大概两周,而esayarm1138已经五天有余),感觉要容易很多。可能是由于函数库的原因吧。
对于32位的编程,一个整体的框架就是:首先是对相关外围模块的使能或者说是时钟的使能,紧接着就是相关端口模块的使能与端口的配置作业,用得到中断的地方要开中断,当然要全部开放的,少一个中断就无法进行,再就是模块的使能了。对于中端处理函数来说,首先是得注册的,这样才能对相关的中端进行处理。具体的中端操作是,读状态,清中断,然后才是相关的处理。
要实现一个功能,就得用得其中的模块,所以首先我们要做的事是能该模块,可以由函数SysCtlPeripheralEnable(xxxx)实现;当然不也得用带芯片的某些或者某个管脚,这就要求我们来使能管脚所在的端口(GPIOx),仍然可以由函数SysCtlPeripheralEnable(xxxx)实现,对于stm32来讲似乎是时钟使能吧?再然后就是管脚的配置了,像输入输出,上拉下拉,uart,i2c等等吧,都有具体的函数(GPIOPinTypexxxx())来实现,当然,对于有些模块来说最后我们还得使能该模块的端口(如UART)。
关于文件
hw_memmap.h -- 宏定义memory map
hw_xx.h --宏定义某个片内或者外围设备的寄存器地址其中包含了某
个寄存器位
xx.h -- 声明函数 xx.c -- 定义函数
1、Bit-band位操作
#define HWREGB(x) (*((volatile unsigned char *)(x)))
对存储单元或寄存器当中某一位的访问,按照传统的“读-改-写”分三步走的操作模式,效率不高;而采用“bit-band”后成为“直接读”和“直接写”,效率明显提高。在整个4GB存储空间里划分出了2个位操作区域,可以分别支持对片内SRAM和片内外设的位操作。
Stellaris器件内部的SRAM的地址是0x2000.0000,为了减少读-修改-写(RMW) 操作的时间,ARM在Cortex-M3处理器中引入了bit-banding技术。在bit-banding使能的处理器中,存储器映射的特定区域(SRAM和外设空间)能够使用地址别名,在单个原子操作中访问各个位。只改变其中的一位。
使用下面的公式来计算bit-band别名:
bit-band别名 = bit-band基址 + (字节偏移量 * 32) + (位编号 * 4)??这里就说明了在
宏定义中左移5位与左移2位的情况了
如果要修改地址0x2000.1000的位3,则bit-band别名计算如下: 0x2200.0000 + (0x1000 * 32) + (3 * 4) = 0x2202.000C 也就是((0x22001000)&(0xF0000000))|(0x02000000)|(((0x000FFFFF)&(0x22001000))<<5)|((0xb)<<2)
2、中断
具体的操作步骤如下:
1、某个模块的使能,进行必要的基本配置 2、配置中断类型
3、调用片内外设具体中断的使能函数
调用函数IntEnable( ),使能片内外设的总中断 调用函数IntMasterEnable( ),使能处理器总中断 4、编写具体的中断服务函数:读状态GPIOPinIntStatus( )、清状态GPIOPinIntClear( ),判断、操作
5、注册中断处理函数,一是直接利用中断注册函数,另一种方法需要修改启动文件 修改启动文件的方法如下:
Keil 在Keil开发环境下,启动文件“Startup.s”是用汇编写的,以中断服务函数“void I2C_ISR(void)”为例,找到“Vectors”表格,在其前面插入声明 EXTERN I2C_ISR
再根据“Vectors”表格的注释内容找到外设I2C0的位置,把相应的“IntDefaultHandler”替换为“I2C_ISR”,完成。
IAR 在IAR开发环境下,启动文件“startup_ewarm.c”是用C语言写的,很好理解。仍以中断服务函数“void I2C_ISR(void)”为例,先在向量表的前面插入函数声明: void I2C_ISR(void);
然后在向量表里,根据注释内容找到外设I2C0的位置,把相应的“IntDefaultHandler”替换为“I2C_ISR”,完成。
抢占优先级
由函数IntPriorityGroupingSet( )设置中断控制器的优先级分组
Cortex-M3用8位来设置优先级,但在stm32中仅用4位来设置优先级。 对于同一抢占优先级的中断来说,即便是优先级高的也不能中断正在执行的中断,只有高抢占优先级的中断方可中断正在执行中的中断。应该是这么理解的。还有一些疑问,有待进一步解决。
下边的五行我个人认为是stm32的关于嵌套中断的说法:
0位抢占优先级,4位子优先级:设置为16级子优先级,不使用抢占式优先级; 1位抢占优先级,3位子优先级:设置为8级子优先级,2级抢占式优先级;
2位抢占优先级,2位子优先级:设置为4级子优先级,4级抢占式优先级; 3位抢占优先级,1位子优先级:设置为2级子优先级,8级抢占式优先级; 4位抢占优先级,0位子优先级:设置为不使用子优先级,16级抢占式优先级;
再回到luminary1138,,举例说明一下这个问题:KEY1的中断优先级高于KEY2的,如果函数IntPriorit …… 此处隐藏:4170字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




