ARM9基础教程.ppt_第1页
ARM9基础教程.ppt_第2页
ARM9基础教程.ppt_第3页
ARM9基础教程.ppt_第4页
ARM9基础教程.ppt_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STR71x 培训教程,MCU Competence Centre Asia-Pacificv3.0 Oct. 2005,2,内 容,目的 STR71x设备 STR71x 系列产品 功能框图 APB总线 内存映射和启动模式 STR71x程序库 程序库的结构 使用例程 STR71x外设 特色 程序库 编程实例,3,内 容,目的 STR71x设备 STR71x系列产品 功能框图 APB总线 内存映射和启动模式 STR71x程序库 程序库的结构 使用例程 STR71x外设 特色 程序库 编程实例,4,目 的,介绍STR71x系列产品 提高对STR71x外设的认知度 介绍STR71x的程序库 培训结束

2、时,能做到如下几点: 列举STR71x内核和外设的主要特点 设置程序库的环境 运用STR71x的程序库进行应用开发,5,内 容,目的 STR71x设备 STR71x系列产品 功能框图 APB总线 内存映射和启动模式 STR71x程序库 程序库的结构 使用例程 STR71x外设 特色 程序库 编程实例,6,STR71x系列产品,ARM7TDMI,基于16/32位RISC指令集的微处理器 高性能 低功耗,Bank0: 10,000次擦写次数 Bank1: 100,000次擦写次数,针对内嵌的内存和闪存的无等待状态,7,STR71xF 型号,引脚数量 R = 64 Z = 144,内存容量 Flas

3、h/RAM 0 = 64KB+16 /16KB 1 = 128KB+16 /32KB 2 = 256KB+16 /64KB,封装 T = TQFP H = BGA,工作温度 6 = -40c / + 85c,特性 0 = USB + CAN 1 = USB 64pin 2 = CAN 64 pin 5 = no can, no usb,内存类型 F= Flash,8,APB2: 通用的外设,STR71x功能框图,ARM7TDMI 16/32位RISC的微处理器,内嵌内存 Flash:256K字节 + 16K字节,RAM:64K字节,EMI(TQFP144):支持多达4个bank的扩展SRAM和

4、闪存,带低功耗模式的电源供给: I/O:3.0V3.6V ADC:0 V2.5V 内核和外设:1.8V,通过PRCCU和PLL实现048MHz主频,2 APB桥: APB1: 通讯类外设,PRCCU,EMI,FLASH,RAM,APB2,APB1,ARM7TDMI CPU,9,APB 1 APB 2,将4K字节内存映射到外设和专用寄存器,- 1个HDLC,STR71x APB总线,- 1个CAN,- 1个USB,- 4个UART,- 2个BSPI,- 2个IC,- 实时时钟,- 增强型中断控制器,- 1个12位的AD转换器,- 4个16位定时器,- 看门狗,- 3个16位的通用I/O口,- 外

5、部中断,连接内部总线到外设,为外设开启时钟,ADC12,EIC,RTC,XTI,WDG,USB,CAN,HDLC,作用:,10,FLASH:256K字节代码区 + 16K字节数据区,内存映射和启动模式,启动模式 可将内存、闪存或扩展内存映射到地址0 x0 通过BOOTEN、BOOT0和BOOT1的引脚决定:,保留,内存重新映射 内存重新映射可以通过软件修改BOOTCR寄存器的boot位来实现,RAM:64K字节,可设定4G字节的内存的地址,EXTMEN:64M字节(4个bank合计),11,内 容,目的 STR71x设备 STR71x系列产品 功能框图 APB总线 内存映射和启动模式 STR7

6、1x程序库 程序库的结构 使用例程 STR71x外设 特色 程序库 编程实例,12,程序库的结构(1),标准的C语言 (只有系统部分是汇编语言编写的) 方便读写外设的函数 对于每一个外设,定义一套函数去实现其功能 习惯的命名一致性使得维护更加容易 减少了新的的应用开发的时间,外设1,外设 n,外设 i,驱动 n,函数 1 函数 2 函数 k,驱动1,函数 1 函数 2 函数 m,接口,开发人员应用,硬件层,软件层,应用层,13,用户应用的源代码,外设的寄存器地址,程序库的结构(2),gpio.c,71x_init.s: 初始化各个模式并跳转到main主函数 71x_vect.s: 其他的向量表

7、 retarget.c: retarget层 scat.scf: 为Linker设定内存映射,外设指针的初始化,共用变量类型和常数,外设的函数头文件,外设的驱动源代码,全局的头文件(所有的),中断函数的的头文件,中断函数的源代码,设置文件,14,Interrupt Handling Example,71x_it.c,71x_vect.s,用户的程序 “USER mode”,指令,指令,IRQ 请求,IRQHandler “IRQ mode”,lr_irq减去4,保存 r0:12,spsr_irq 和 lr_irq,执行位于IVR内的指令,跳到IRQHandler子程序,0 x18,TIMIRQ

8、Handler,切换到SYS mode, 打开IRQ中断,跳转到 TIM_IRQHandler,切换到 IRQ mode,TIMI_RQHandler,TIM IRQ Handler 的C代码,清除相应的标志位,恢复 r0:12,spsr_irq 和 lr_irq,lr_irq赋予PC spsr_irq恢复给 cpsr,指令,IRQ Disabled,IRQ Enabled,main / 71x_it.c,15,软件库的使用例程(1),共同的文件必须拷贝到工作的目录里 使用某个外设:PPPx 项目需要指向源文件:“ppp.c”和“includeppp.h” 编辑71x_conf.h文件,设定如

9、下: #define _PPP(必须的) #define _PPPx(可选的,根据外设决定) 如果用户希望调试应用,必须在71x_conf.h文件中定义DEBUG: #define DEBUG 在用户的应用中需包含以下行: #include “71x_lib.h”,16,软件库的使用例程(2),71x_conf.h #define DEBUG #define _GPIO /* include gpio.h file */ #define _GPIO0 /* use GPIO0 peripheral */,71x_map.h typedef volatile struct u16 PC0; u1

10、6 EMPTY1; u16 PC1; u16 EMPTY2; u16 PC2; u16 EMPTY3; u16 PD; GPIO_TypeDef; #define GPIO0_BASE (APB2_BASE + 0 x3000) #ifdef DEBUG #ifdef _GPIO0 EXT GPIO_TypeDef *GPIO0; #endif /* _GPIO0 */ #else /* NON DEBUG */ #define GPIO0 (GPIO_TypeDef *)GPIO0_BASE) #endif /* DEBUG */,71x_lib.h #include 71x_type.h

11、#include 71x_conf.h #include 71x_map.h #ifdef _GPIO #include gpio.h“ #endif,main.c #include 71x_lib.h int main #ifdef DEBUG debug(); #endif GPIO_Config(GPIO0,0 xFFFF,GPIO_OUT_PP); / main program ,用户根据需求进行修改,不可修改此文件,不可修改此文件,用户的文件,仅仅包含71x_lib.h,在DEBUG模式下,初始化外设的指针,非DEBUG模式下使用的内容,在DEBUG模式小外设的结构指针,在71x_c

12、onf.h定义_GPIO,将gpio.h加入用户的项目中,17,关于使用库文件进行编程的警告,由于ARM的精简指令集,对于内存或者I/O口的边读边写的操作是可以被打断的(被分解成两个基本的指令), 因此在以下几种可能存在数据被破坏危险的代码段,用户必须进行临界保存: 在可能发生的代码处关闭中断 临界部分的起始处 进行读写操作时 临界部分的结束时 重新开启中断,!,18,内 容,目的 STR71x设备 STR71x系列产品 功能框图 APB总线 内存映射和启动模式 STR71x程序库 程序库的结构 使用例程 STR71x外设 特色 程序库 编程实例,19,STR71x 外 设电源,复位和时钟控制

13、单元(PRCCU),20,电源,复位和时钟控制单元(PRCCU),PRCCU,21,电源,复位和时钟控制单元,具有增强型节电特色的独立电源功能块 具有硬件和软件复位源的复位管理功能块 具有宽广的时钟频率和时钟源的时钟控制单元,22,复位单元,硬件复位: 具有提高EMC的模拟过滤器的复位(只有输入功能) 内部看门狗复位 低电压检测复位 仅仅从STANDBY模式唤醒的实时时钟警告和的唤醒引脚的复位 软件复位: RCCU_CCR -SRESEN =1 RCCU_CCR-EN_HALT=1 RCCU_SMR-HALT =1,23,主时钟系统频率达到50 MHz,时钟控制单元,4个时钟源,两个独立的PL

14、L: 具有12,16, 20和24倍频的PLL1倍频器 具有12,16, 20和28倍频的PLL2倍频器 具有 17 连续分频的PLL分频器,为每个外设提供独立的时钟,24,控制单元的时钟限制,25,电压功能块,外部3.3V单电压供电,I/O输出高电平为3.3V电平,2个内嵌的需外接电容的1.8V电压调节器 主电压调节器 低功耗电压调节器,4种节电模式: Slow Wait For Interrupt Stop Standby,Low Power Logic,RTC,3.3V,1.8V Backup,IO,26,低功耗模式(1/3),Slow模式 通过降低主钟来降低功耗。,WFI模式 通过停止

15、内核运行降低功耗。外设继续运行同时寄存器的内容被保护起来。,Stop模式 在没有复位设备的情况下,停止时钟,需要保存MCU的状态,内部的维持供电。,Standby模式 在Standby模式下,内部关闭主电压调节器,停止给设备的内核供电。通过RTC、WAKEUP硬件和复位退出。,运行 完全供电模式,27,低功耗模式(2/3),等待中断模式(WFI) CPU被强制进入IDLE状态 恢复事件:任意一个被EIC接收外设的中断将恢复操作 SLOW模式 通过软件设定可选的慢时钟 3种不同的慢时钟源:CLK2, CLK2/16, CK_AF 低功耗的WFI模式 结合了WFI和SLOW模式,28,低功耗模式(

16、3/3),STOP模式 所以系统时钟停止 仍然维持整个芯片的供电 恢复事件:外部的Wake-Up引脚、通过XTI传递的RTC警告、从USB挂起模式唤醒。 可设置从STOP模式退出的中断 STANDBY模式 V18停止供电 停止所以系统的时钟 所有I/O口强制进入高阻状态 独立的供电系统为后备功能块提供电源(LVR) 通过nSTDBY引脚监控系统状态,29,低功耗模式总结,30,RCCU_FCLKConfig(RCCU_RCLK_2); ,APB1的时钟等于PLL1输出时钟的1/2,PRCCU 编程实例,设置步骤,编程步骤,选择Clock2作为主输入时钟,设置PLL1参数,选择PLL1的输出时钟

17、作为主输入时钟,主系统时钟等于PLL1输出时钟,APB2的时钟等于PLL1输出时钟的1/2,RCCU_RCLKSourceConfig(RCCU_CLOCK2);,RCCU_PLL1Config(RCCU_Mul_20, RCCU_Div_4);,RCCU_RCLKSourceConfig(RCCU_PLL1_Output);,RCCU_MCLKConfig(RCCU_DEFAULT);,RCCU_PCLKConfig(RCCU_RCLK_2);,在本例程中,设置时钟控制单元为主系统产生40MHz的时钟频率,同时为APB1产生20MHz的时钟以及为APB2外设产生16MHz的时钟。,31,测验

18、,PLL1的最大输入频率是多少? _ 有多少个时钟有是可用的? _ 复位源有几个? _ V1.8引脚的作用是什么? _ STR71x有几种省电模式? _,32,STR71x的外设扩展内存接口(EMI),33,扩展内存接口(EMI),EMI,34,EMI 特色,可选择扩展4片内存芯片 每段均可进行如下设置: 扩展内存空间最多可寻址16M字节 在读写周期内最大有15个等待周期 可选择编程的数据总线宽度(16或8位) 独立的使能控制,35,EMI 读写周期,16位扩展内存的有3个等待周期的16位写周期时序图。,MCLK,RDn,CSn2,读取时间长度 (3个等待周期),WEn0,WEn1,A1:0,

19、D15:0(output),36,data = *(u32*)(0 x62000000); ,EMI 编程实例,编程步骤,设置步骤,本例子演示如何进行EMI读写。,将0 x12345678写入Bank 1,开启Bank 1并设置为5个等待周期的8位数据总线,禁用Bank 0,从Bank 1中读取数据,EMI_Config(0, EMI_DISABLE);,EMI_Config(1, EMI_ENABLE |EMI_WAITSTATE(5) | EMI_SIZE_8);,*(u32*)(0 x62000000) = 0 x12345678;,设置I/O口位可变功能口, GPIO_Config(G

20、PIO2, 0 x000F, GPIO_AF_PP);,!,记住:需设置GPIO2口的引脚位推-拉(Push-Pull)可变功能口!,37,测验,共有几扩展段? _ 那款STR71x微处理器有EMI? _ 最大寻址空间是多少? _ 那个段用于启动? _,38,STR71x的外设片内闪存,39,片内闪存,FLASH,40,闪存的特色,两个独立的内存段: Bank 0 : 分成8个扇区(sector)的256K字节内存 Bank 1 : 分成2个扇区的16K字节内存 写(编程和擦除)序列内部管理。 基于扇区的擦除操作(每个扇区可单独擦除)。 可进行单个字(32位)或双字(64位)编程操作。 可挂起

21、正在进行的写操作。 可以从一个内存段读取数据同时写入另一个内存段。 两种操作模式: 随机: 执行无等待的读操作,频率最高可达33MHz。 突发: 执行无等待的持续数据访问,频率最高可达50MHz。 2种保护方式: 写保护:可以设定一个扇区进行写保护 调试保护:调试功能和JTAG引脚被禁用,41,闪存编程实例,设置步骤,编程步骤,本例程中,先将数据写入扇区0和扇区1中,然后擦除所有的闪存模块。,初始化闪存的寄存器,将0 x12345678写入闪存模块的第0段的扇区0,将0 x87654321写入闪存模块的第1段的扇区0,擦除所有的闪存模块, FLASH_Init();,FLASH_WordWri

22、te(0 x00000000, 0 x12345678);,FLASH_WordWrite(0 x000C0000, 0 x87654321);,FLASH_ModuleErase(); ,42,测验,内部闪存有几种操作模式? _ 每种操作模式最大工作频率是多少? _ 有几种保护级别? _,43,STR71x的外设高级外设总线(APB),44,APB概览,APB桥允许ARM7内部总线和外设映射到APB总线进行通讯连接。,2个分立的桥: APB1:针对快速外设,例如IC、 UART、USB、CAN、SPI、HDLC。,APB2:针对慢速外设,例如EIC、 XTI、GPIOs、ADC12、Time

23、r、RTC、Watchdog。,45,APB桥的特色,外设的时钟: APB桥控制着外设时钟开启。可以通过激活或屏蔽CKDIS寄存器来实现每一个外设的时钟信号。 外设的复位: APB桥同时也控制所有外设的复位。可以通过激活或屏蔽SWRES寄存器来实现是否对每一个外设进行复位或不复位。,46,APB编程实例,设置步骤,编程步骤,在本例程中,对UART0、UART1和UART2(位于APB1)的时钟和复位进行设置。,关闭UART0和UART1的时钟,开启UART2的时钟,设定UART0和UART1处于复位状态,关闭UART2的复位状态, APB_ClockConfig(APB1, UART0_Per

24、iph | UART1_Periph, DISABLE);,APB_ClockConfig(APB1, UART2_Periph, ENABLE);,APB_SwResetConfig(APB1, UART0_Periph | UART1_Periph, ENABLE);,APB_SwResetConfig(APB1, UART2_Periph, DISABLE); ,SWRES,CKDIS,X,X,CKDIS,47,STR71x的外设12位的模数转换器(ADC12),48,模数转换器 (ADC12),ADC12,49,转换结果存储在相应的4个通道的寄存器内,转换结果与VinVcm的差值成比例

25、。,ADC12的特色,12位的转换结果 输入电压范围:02.5V,Sigma-Delta结构体系,4通道模拟输入,2种转换模式: Round-robin(高达500Hz/2ms),4用于显示转换结构是否有效的标志位,时钟设置: PRESCALER = APB2_FREQ / (SAMPLE_FREQ 512 8),转换结束中断,单次通道(高达500Hz/2ms),输出,Clock Prescaler Register,Control/Status Register,Vref,VCM,Mux,Clock Prescaler Register,Control/Status Register,50,

26、ADC12操作模式,正常操作(Round Robin),单次通道操作,512个过采样时钟周期,占用2048个时钟周期,51,ADC12编程实例,设置步骤,编程步骤,!,记住将GPIO1口的引脚设为高阻模拟输入!,在本例程中,演示在单次通道模式下如何使用模数转换器。,开启转换器,设置预分频器,设置转换模式,选择转换通道,等待直到转换数据有效标志被置为1,读取转换结果,关闭转换器, ADC12_Init();,ADC12_PrescalerConfig(500);,ADC12_ModeConfig(ADC12_SINGLE);,ADC12_ChannelSelect(ADC12_CHANNEL0)

27、:,while (!ADC12_FlagStatus(ADC12_DA0);,ADC12_ConversionValue(ADC12_CHANNEL0);,ADC12_ConversionStop(); ,ADC12_ConversionStart();,初始化转换器,GPIO_Config(GPIO1, 0 x0001, GPIO_HI_AIN_TRI);,设置I/O口为模拟输入,52,测验,转换电压的输入范围是多少? _ ADC转换结果是几位? _,53,STR71x的外设增强型中断控制器(EIC),54,增强型中断控制器(EIC),EIC,55,EIC的特色,多个中断通道的硬件操作,中断

28、优先级、自动向量化,32个可屏蔽中断,映射在ARM的中断查询引脚IRQ。,每一个IRQ中断都有16个可编程优先级别。,支持硬件中断嵌套(15级)。,2个可屏蔽中断,映射到ARM的快速中断查询引脚FIQ,既无优先级也不会自动向量化。,IRQ31,Current Interrupt Priority,IER,IPR,FIR,FIP,FIQ0,FIQ1,IRQ0,IRQ1,FIQ 控制逻辑,IRQ 控制逻辑,FIQ查询,ICR,FIQ到ARM内核,IRQ到ARM内核,IRQ查询,堆栈控制(PUSH/POP),Priority Stack (16 entry),中断向量表 (32个入口),SIR,IV

29、R,CIPR,最高优先级的中断,从IRQn所在行获取中断,中断 向量表 (32个入口),当前中断 的优先级,优先级堆栈 (16个入口),56,EIC优先级和仲裁,中断的优先级被定义为0-15级 15级是最高优先级 0级是最低级 一个中断请求要被内核处理,必须具备以下条件: 在IER(Interrupt Enable Register)寄存器中必须被开启 在当前等待处理的中断请求中,拥有最高的优先级,同时它的优先级要高于当前正在处理的中断 所以优先级小于等于主程序级别的中断源不会产生IRQ请求,即使它完全被开启。,57,设置EIC的编程注意要点,监测IRQ中断 设置SIRn中SIPLn区域的通道

30、优先级(必须不是0才能有IRQ被产生) 将中断服务程序相对于中断起始点的地址偏移量写入SIVn(SIVn31:16)中。 在IVR31:16中插入跳转基地址(或跳转伪代码) 设置IERn位打开目标通道 设置ICR寄存器中的IRQ_EN位为 1,监测FIQ中断 设置FIR寄存器中的FIE的0位或1位为 1 设置ICP寄存器中的FIQ_EN位为 1,58,IVR 15:0被SIRn31:16里的内容更新。,最后EIC恢复先前的中断优先级、IVR15:0和中断的ID。,然后通过新的中断ID更新。,在退出中断复位程序前,,当读取IVR时,EIC保存先前的中断优先级和中断的ID到堆栈中去。,EIC用新的

31、优先级更新当前中断优先级,ARM7TDMI的IRQ的引脚被置低直到IVR被读取。,软件必须清除相关的中断请求标志位。,0 xE59FF824,IRQ中断处理的例程,IVR,0,1,0,0,0,IER,IPR,IRQ Control Logic,Priority Stack (16个入口),ICR,0 xF820,CIPR,0 xF824,SIR0,SIR1,0,4,SIR2 . SIR31,0 xF824,4,IRQ to ARM7TDMI,F820,0,0 xE59F,当IRQ引脚被置位,IPn被置位,如果IRQ请求被EIC接收,0,1,0 xF824,0 xF824,0 xF824,0 x

32、E59FF824,4,4,0,4,0,0 xF820,0 xE59FF820,0,59,编程步骤,设置步骤,在本例程中,演示如何使用EIC去启动通道2的IRQ和FIQ。,EIC编程实例,设置IRQ通道2的优先级为4,打开IRQ通道2的中断,打开IRQ的中断,打开FIQ通道0的中断,打开FIQ的中断, EIC_IRQChannelPriorityConfig(RCCU_IRQChannel, 4);,EIC_IRQChannelConfig(RCCU_IRQChannel, ENABLE);,EIC_IRQConfig(ENABLE);,EIC_FIQChannelConfig(T0TIMI_F

33、IQChannel, ENABLE);,EIC_FIQConfig(ENABLE); ,60,测验,EIC管理多少个IRQ通道? _ IRQ的最高优先级是多少? _ 怎样开启一个IRQ? _ EIC管理多少个FIQ? _,61,STR71x的外设定时器,62,定时器,63,定时器的特色,可软件设置时钟和可选择触发边沿,自主运行,16位正向计数器,预制预分频器(1到256),5种操作模式:,比较输出,单脉冲,PWM输出,PWM输入,输入捕捉,16-bit Counter,1/CC,64,定时器的输入捕捉模式,检测到输入信号的边沿,就捕捉计数器的值 可以进行外部脉冲长度的测量,65,定时器的输出比

34、较模式,只要比较寄存器与计数器相匹配,则发出输出事件(中断请求/位锁定), 指示一个周期的时间 控制输出波形,66,定时器的单脉冲模式,与外部事件同步产生一个脉冲,输入捕捉事件,定时器输出引脚被锁定为OLVLB级别,输出比较事件,定时器等待下一个捕捉事件,定时器输出引脚被锁定为OLVLA级别,计数器复位后值为:0 xFFFC,IEDGA = 1,OCAR = 0 x2ED0,OLVLA = 0,OLVLB = 1,FFFC,2ED0,67,定时器的PWM输出模式,脉冲宽度调制信号自动生成,输出比较A寄存器包含脉冲的长度,OLVLA位表示脉冲的电平,输出比较A寄存器包含脉冲的周期,OLVLB表示

35、脉冲后的电平,OCBR = 0 x34E2,OCAR = 0 x2ED0,OLVLA = 0,OLVLB = 1,类似单脉冲,但是输入捕捉事件被第二个输出比较事件替换,34E2,2ED0,68,定时器的PWM输入模式,外部波形的脉冲和周期的测量,通过IEDGA位来设置第一个边沿,通过IEDGB位来设置第二个边沿,信号的周期保存在ICAPA,脉冲的长度保存在ICAPB,可编程设置第一个边沿的检测,产生中断,ICBR = 0 x34E2,ICAR = 0 x2ED0,IEDGA = 1,IEDGB = 0,69,定时器编程实例,设置步骤,编程步骤,本例程中设置定时器3每次在输入捕捉通道A商检测到一

36、个有效的下降沿,就产生一个中断。,初始化定时器3,设置ICAPA作为输入引脚,设置输入捕捉模式,开启输入捕捉中断,Da kai定时器的IRQ通道,启动定时器的计数器, TIM_Init(TIM3);,GPIO_Config(GPIO1, TIM3_ICAP_A, GPIO_IN_TRI_TTL);,TIM_ICAPModeConfig(TIM3, TIM_CHANNEL_A, TIM_FALLING);,TIM_ITConfig(TIM3, TIM_ICA_IT, ENABLE);,EIC_IRQChannelConfig(T3TIMI_IRQChannel, ENABLE); EIC_IRQ

37、ChannelPriorityConfig(T3TIMI_IRQChannel, 1); EIC_IRQConfig(ENABLE);,TIM_CounterConfig(TIM3, TIM_START); ,!,记住设置GPIO1口的引脚位输入三态TTL!,70,测验,列举定时器的操作模式: _ _ _ _ _,71,STR71x的外设实时时钟(RTC),72,Real Time Clock (RTC),RTC,73,实时时钟的特色,可软件设置时钟分频器,32位软件可编程计数器,外部32kHz时钟输入,中断特性:4个可屏蔽中断 周期性中断(Second interrupt),报警中断(Ala

38、rm interrupt),溢出中断(Overflow interrupt),全局中断(Global Interrupt),防止误操作保护寄存器,RTC_CNT,74,实时时钟设置模式,对RTCL、RTCCNT、RTCA寄存器写操作,实时时钟进入设置模式。,设置步骤,RTC Control Register Low (RTCCRL),RTOFF,CNF,等待,直到上一次的操作完成(RTOFF = 1),置位CNF位,写RTC的寄存器,清除CNF位,75,RTC编程实例,设置步骤,编程步骤,下面的例子介绍如何进行了RTC报警值的设置,当RTC的计数器的值到达RTC报警值时,RTC发出一个报警中断

39、。,设置RTC的分频器的值位0 x8000,设置RTC的时间,设置RTC的报警时间,允许RTC报警中断,打开RTC的IRQ通道, RTC_PrescalerConfig(0 x8000);,RTC_CounterConfig (0 x3FF36300);,RTC_AlarmConfig(RTC_counterValue()+5);,EIC_IRQChannelConfig(RTC_IRQChannel, ENABLE);,EIC_IRQChannelPriorityConfig(RTC_IRQChannel, 4);,EIC_IRQConfig(ENABLE); ,RTC_ITConfig(R

40、TC_AIT|RTC_GIT, ENABLE);,76,测验,如何设置RTC? _ _ _ _,77,STR71x的外设外部中断(XTI),78,外部中断(XTI),XTI,79,外部中断的特色,连接到增强型中断控制器模块IRQ5通道上,支持多达16个可独立屏蔽的中断源 软件IRQ中断(中断源0) USB唤醒事件:从挂起模式退出时产生中断(中断源1) 14个外部中断线(中断源15.2),外部中断可以用于将系统从STOP模式唤醒,可编程选择:唤醒或带中断的唤醒,可编程设置边沿触发极性 下降沿 上升沿,80,外部中断的设置过程中断模式,设置外部中断的流程: 设置外部中断的屏蔽位(MRL、MRH)

41、设置外部中断的触发信号的边沿方式的寄存器(TRL、TRH) 在CTRL寄存器中设置ID1S位,打开外部中断 设置相应的I/O引脚为输入模式 记住在EIC中开启外部中断以及设置外部中断通道的优先级,81,外部中断的设置过程唤醒模式,设置一个外部中断为唤醒源的流程: 设置外部中断的屏蔽位(MRL、MRH) 设置外部中断的触发信号的边沿方式的寄存器(TRL、TRH) 在CTRL寄存器中设置WKUP-INT位,选择唤醒模式 设置相应的I/O引脚为输入模式 进入STOP模式,写入连续的1、0、1到CTRL寄存器的STOP位,82,编程步骤,设置步骤,本例程演示如何使用XTI去开启外部中断线2和15的中断

42、。,XTI编程实例,设置中断的第2根线的触发边沿为下降沿,开启外部中断第2根线,设置中断第15根线的触发边沿为上升沿,打开第15根线的中断,启动中断模式, XTI_LineModeConfig(XTI_Line2, XTI_FallingEdge);,XTI_LineConfig(XTI_Line2, ENABLE);,XTI_LineModeConfig(XTI_Line15, XTI_RisingEdge);,XTI_LineConfig(XTI_Line15, ENABLE);,XTI_ModeConfig(XTI_Interrupt, ENABLE); ,83,测验,XTI管理多少个中

43、断源? _ 有多少个外部中断线? _ 外部中断连接在IRQ的哪个通道上? _,84,STR71x的外设看门狗定时器(WDG),85,看门狗定时器(WDG),WDG,86,看门狗的特色,2种操作模式: 看门狗 定时器,16位递减计数器,8位的时钟分频器,能安全重载定时的数据,自由运行的定时器方式,计数结束时生成中断,8-bit Prescaler,16-bit Counter,87,编程步骤,设置步骤,本例程演示如何去使用看门狗中断。,看门狗编程实例(1/2),关闭计数结束中断,停止定时器计数,设置定时器的周期为12345s,设定看门狗的中断优先级,打开看门狗的中断请求,允许中断, WDG_EC

44、ITConfig(DISABLE);,WDG_CntOnOffConfig(DISABLE);,WDG_PeriodValueConfig(12345);,EIC_IRQChannelPriorityConfig(WDG_IRQChannel, 1);,EIC_IRQChannelConfig(WDG_IRQChannel, ENABLE);,EIC_IRQConfig(ENABLE);,WDG_ECITConfig(ENABLE);,打开计数结束中断,WDG_CntOnOffConfig(ENABLE); ,启动定时器进行递减计数,每次定时器的周期结束,WDG_IRQHandler()函数被

45、调用。,88,编程步骤,设置步骤,本例程演示如何处理带有中断复位的看门狗模式。,看门狗编程实例(2/2),关闭计数结束中断,停止定时器计数,设定预分频寄存器的值为0 xFF,设置重载寄存器为1613,启动看门狗模式(启动后不能被关闭), WDG_ECITConfig(DISABLE);,WDG_CntOnOffConfig(DISABLE);,WDG_PrescalerConfig(0 xFF);,WDG_CntReloadUpdate(1613);,WDG_Enable();,while (condition) ,WDG_CntRefresh();,周期性刷新定时器的计数器,以避免系统复位,

46、 ,一旦定时器的计数器的值达到0且没有被刷新,系统就将被复位。,89,STR71x的外设通用输入/输出口(GPIO),90,通用输入输出口(GPIO),GPIO0,GPIO1,GPIO2,91,通用I/O口的特色,多达48个多功能双向I/O口可用: 40个标准的I/O口(可吸纳4mA) 8个高电流I/O口(P2.0 - P2.7可吸纳8mA) 4个模拟输入口(P1.0 - P1.3) 可改变功能的引脚(针对Timers、UART、SPI、CAN、USB、I2C) 14个可设为唤醒和中断输入的I/O口 I/O口的数量取决与芯片的封装: STR710 : 48个I/O口 STR711 : 30个I

47、/O口 STR712 : 32个I/O口,92,GPIO的设置,所有的I/O口都是可以对下面三个寄存器进行独立设置: PC0: 设置寄存器0 PC1:设置寄存器1 PC2:设置寄存器2 数据口是16位的寄存器: PD:数据寄存器,93,GPIO的逻辑结构,94,GPIO编程要点,A/D转换 每个被ADC12使用的引脚必须设置为高阻模拟输入。 更换功能 每个被用作输入/输出更换功能的引脚必须被设置为Alternate Function Push Pull 或Alternate Function Open Drain (例如:定时器输出比较、UART的Tx等等)。 每个被用作输入更换功能的引脚必须

48、被设置为input tristate以避免一些内部冲突 (例如:UART的Rx)。 Open Drain输出 能用于多个设备连接在同一根线上的总线驱动。 能被一起以并行的方式连接起来使用,以增加电流的驱动能力。 数据输入/输出 能用于设置GPIO口为带上拉或下来电阻的输入方式(电阻阻值为100K) 警告 在执行少于16位I/O数据的高级功能时,如果总是执行16位的边读边写操作,有可能被中断从而导致数据出错。为了避免这种现象,一部分代码需放置在临界区(局部进行关闭/开启中断操作)。,95,编程步骤,设置步骤,本例程演示如何设置I/O口引脚。,GPIO编程实例,设置P0.0:P0.7作为Push-

49、Pull输出,设置P0.0:P0.7输出为高,设置P0.8为TTL输入,设置P0.10:P0.11为Alternate Function Push-Pull,设置P1.13为Open Drain输出,设置P1.15为Wake-Up和中断输入, GPIO_Config(GPIO0, 0 x00FF, GPIO_OUT_PP);,GPIO_ByteWrite(GPIO0, GPIO_LSB, 0 xFF);,GPIO_Config(GPIO0, 18, GPIO_IN_TRI_TTL);,GPIO_Config(GPIO0, 0 x0C00, GPIO_AF_PP);,GPIO_Config(GP

50、IO1, 113, GPIO_OUT_OD);,GPIO_Config(GPIO1, 0 x8000, GPIO_INOUT_WP); ,96,测验,STR711有多少个GPIO口? _ STR710有多少高灌电流引脚可用? _ 怎样设置UART的Rx引脚? _ 能否使用通过GPIO口进行8位数据的操作? _,97,STR71x的外设Inter-Integrated Circuit(IC),98,Inter-Integrated Circuit (IC),99,IC 的特色,两个IC接口: I2C0的引脚与HDLC复用 I2C1的引脚与BSPI0复用 实现IC总线规范的传输顺序、协议、仲裁和延

51、时 多主机和从机特性 标准和快速IC模式(最高400kHz) 7位和10位地址,100,IC 的功能块图,2个双向引脚,标准和快速IC模式(最高400kHz),7位和10位地址,可产生中断,字节传输结束标志位,地址传输结束标志位,错误检测标志位,101,IC 时钟控制,2个寄存器控制时钟: 时钟控制寄存器(CCR) 扩充时钟控制寄存器(ECCR) 根据速度进行设置(标准/快速) 标准模式(FM/SM=0): FSCL 100kHz 快速模式(FM/SM=1): 100kHz FSCL 400kHz,CC11.CC0 = (FAPB1 / 2 FSCL) - 7,CC11.CC0 = (FAPB

52、1 / 3 FSCL) - 9,102,生成停止条件,I2C_SpeedConfig (I2C0, 100000);,!,记住设置GPIO1口的引脚位Alternate Function Open Drain !,设置步骤,编程步骤,本例程演示如何使用I2C0以使用7位地址模式作为主传输机进行传输。,设置接口的延时,打开I2C接口,设置接口的速度,生成起始条件,等待直到SB标志位被置高,然后清除它,发送字节给从机, I2C_Init (I2C0);,I2C_OnOffConfig (I2C0, ENABLE);,I2C_STARTGenerate (I2C0, ENABLE);,I2C_Add

53、ressSend (I2C0, 0 x90, I2C_Mode7, I2C_TX);,while (!(I2C_FlagStatus (I2C0, DIRECT, I2C_SB);,while (!(I2C_FlagStatus (I2C0, DIRECT, I2C_ENDAD); I2C_FlagClear (I2C0, I2C_ENDAD);,I2C_ByteSend (I2C0, 0 x09);,I2C_STOPGenerate (I2C0, ENABLE);,I2C_OnOffConfig (I2C0, DISABLE); ,发送从机的地址,等待直到ENDAD标志位被置高,然后清除它,

54、IC 编程实例,I2C_FCLK_Config (I2C0);,初始化I2C0的接口,GPIO_Config (GPIO1, I2C0_SCL| I2C0_SDA, GPIO_AF_OD);,关闭I2C接口,设置SCL和SDA的I/O口位AF Open Drain,103,测验,STR710有几个I2C接口? _ 这些接口分别与哪个外设复用引脚? _ I2C接口支持哪种模式? _,104,STR71x的外设Buffered Serial Peripheral Interface (BSPI),105,Buffered Serial Peripheral Interface (BSPI),106

55、,BSPI 特色,2个接口: BSPI0与I2C1和UART3复用 BSPI1 可编程FIFO,深度可达2个10字(16-bit ) 可以进行8位或16位字长的操作 发送和接收可产生中断 正常主从模式,107,BSPI Block Diagram,16位总线,内部时钟,2个控制/状态寄存器,2个FIFO:传输和接收,16位移位寄存器,引脚控制逻辑,Shift Register,108,设置接口速度,设置步骤,编程步骤,本例程演示然后使用BSPI1作为主机去传输3个字。,打开BSPI1的接口,选择主机模式,设置时钟为 active high,启动捕捉第一数据采样在SCK的第一边沿上。,设置字的长

56、度为16位,传输FIFO深度位3个字,传输3个字的数据, BSPI_Init(BSPI1);,BSPI_Enable (BSPI1, ENABLE);,BSPI_MasterEnable (BSPI1, ENABLE);,BSPI_ClkActiveHigh(BSPI1, ENABLE);,BSPI_ClkFEdge(BSPI1, ENABLE);,BSPI_8bLEn(BSPI1, DISABLE);,BSPI_TrFifoDepth(BSPI1, 3);,for(i=0; i3; i+) BSPI_WordSend(BSPI1, 0 x5555); ,BSPI编程实例,!,记住设置GPIO

57、口的引脚为Alternate Function Push-Pull !,初始化BSPI1,BSPI_ClockDividerConfig (BSPI1, 0 x20);,GPIO_Config (GPIO0, 0 x0070, GPIO_AF_PP);,设置I/Os为Alternate Function Push-Pull,109,测验,BSPI0与哪些外设复用? _ BSPI的FIFO深度是多少? _,110,STR71x的外设 通用异步传输串口(UART),111,通用异步传输串行口 (UART),112,UART的特色(1/2),全双工,异步通讯 内部有两个用于接收和发送数据的的FIFO(16字的深度) 16位波特率发生器: 波特率 = fAPB1 / (16 BRR) 数据位长度: 8位 9位 停止位: 0.5位 1位 1.5位 2位 有干扰、溢出和帧出错等检测 奇偶校验 回送 UART1可以用于智能卡(SmartCard)模式 UART3可以复用为BSPI0,113,UART的特色(2/2),最高位唤醒功能 9个带标志位的中断源: 接收缓冲区满 接收缓冲区一半满 检测溢出出错 传输缓冲区空

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论