DS原理基础及其设计 5_第1页
DS原理基础及其设计 5_第2页
DS原理基础及其设计 5_第3页
DS原理基础及其设计 5_第4页
DS原理基础及其设计 5_第5页
已阅读5页,还剩27页未读, 继续免费阅读

下载本文档

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

文档简介

DSP原理与应用PrincipleandApplicationofDSP长沙师范学院信息科学与工程学院04第四章TMS320C6748常用外设学容通用输入输出接口GPIO定时器123习内中断系统4.1通用输入输出接口GPIO通用输入输出接口(GPIO)是DSP与外部电路之间的重要的通用引脚,这些引脚可以配置为输入或输出。TMS320C6748将GPIO引脚编排成9个组(BANK0~BANK8),每组(BANK)包含16个GPIO引脚,最多可配置144个GPIO引脚。每组(BANK)引脚的配置与功能由一组寄存器来控制实现,C6748的寄存器通常是32位的,每个32位GPIO寄存器对应两组BANK(共32个引脚)。4.1通用输入输出接口GPIO4.1.1

GPIO的工作原理C6748的GPIO内部结构通常包含方向寄存器(DIR)、置位寄存器(SET_DATA)、清除寄存器(CLR_DATA)、输入/输出寄存器(INDATA/OUTDAT)、边缘检测逻辑模块(EdgeDetectionLogic)与相关寄存器等部分组成,其内部结构框图如右图所示。通过向方向寄存器(DIR)写入适当值来配置GPIO引脚的功能是输入或者输出。GPIO输出数据寄存器(OUT_DATA)保存当前GPIO的电平状态。GPIO的功能:输出功能、输入功能、中断功能4.1通用输入输出接口GPIO4.1.2

GPIO寄存器C6748每组(BANK)包含16个GPIO信号,每个32位的GPIO寄存器对应两组(BANK)GPIO信号。(1)GPIO中断使能寄存器(BINTEN)(2)GPIO方向寄存器(DIRn)0-----中断禁止

1-----中断使能0-----输出

1-----输入4.1通用输入输出接口GPIO(3)输出数据寄存器(OUT_DATAn)(4)GPIO数据置位寄存器(SET_DATAn)0-----低电平1-----高电平0-----无效

1-----输出高电平4.1通用输入输出接口GPIO(5)GPIO数据清除寄存器(CLR_DATAn)

0--------无效1-----输出低电平(6)GPIO输入数据寄存器(IN_DATAn)0--------逻辑低电平1-----逻辑高电平(7)GPIO上升沿中断设置寄存器(SET_RIS_TRIGn)0--------无效1-----允许引脚上电平由低变高产生中断(8)GPIO上升沿中断清除寄存器(CLR_RIS_TRIGn)

0--------无效1-----禁止引脚上电平由低变高产生中断(9)GPIO下降沿中断设置寄存器(SET_FAL_TRIGn)0--------无效1-----允许引脚上电平由高变低产生中断(10)GPIO下降沿中断清除寄存器(CLR_FAL_TRIGn)0--------无效1-----禁止引脚上电平由高变低产生中断(11)GPIO中断状态寄存器(INTSTATn)

0--------无中断1-----有中断申请4.1通用输入输出接口GPIO4.1.3

GPIO应用实例1.需求分析:控制GPIO0[0]、GPIO0[1]、GPIO0[2]、GPIO0[5]四个引脚上LED的亮灭;2.逐段剖析例4-1代码:使能外设时钟→配置引脚复用→设置方向寄存器→写输出数据寄存器控制LED;for(;;){ Delay(0x00FFFFFF);//延时

GPIOPinWrite(SOC_GPIO_0_REGS,3,GPIO_PIN_LOW);//D10灭GPIO0[2] GPIOPinWrite(SOC_GPIO_0_REGS,1,GPIO_PIN_HIGH);//D7亮GPIO0[0] Delay(0x00FFFFFF);//延时

GPIOPinWrite(SOC_GPIO_0_REGS,1,GPIO_PIN_LOW);//D7灭GPIO0[0] GPIOPinWrite(SOC_GPIO_0_REGS,6,GPIO_PIN_HIGH);//D6亮GPIO0[5] Delay(0x00FFFFFF);//延时 GPIOPinWrite(SOC_GPIO_0_REGS,6,GPIO_PIN_LOW);//D6灭GPIO0[5] GPIOPinWrite(SOC_GPIO_0_REGS,2,GPIO_PIN_HIGH);//D9亮GPIO0[1] Delay(0x00FFFFFF);//延时

GPIOPinWrite(SOC_GPIO_0_REGS,2,GPIO_PIN_LOW);//D9灭GPIO0[1] GPIOPinWrite(SOC_GPIO_0_REGS,3,GPIO_PIN_HIGH);//D10亮GPIO0[2]} 4.2中断系统中断是指DSP实现与外设之间实时交互的一种控制方式。当DSP在执行当前程序时由于内部或外部事件的触发中断请求,DSP暂时停止当前程序的执行,转而去执行相应的中断服务程序;待中断服务程序执行完毕后,DSP再返回原来被中断的程序继续执行。(1)C6748中断处理与响应过程产生中断请求:由外设触发中断条件或软件中断(应用程序中的软件中断指令)提出中断申请;响应中断:CPU按照中断使能状态和中断屏蔽状态判断是否响应可屏蔽中断;对于非屏蔽中断,CPU会立即做出响应;在响应中断时,CPU会清除流水线上尚未执行的指令,并将相关CPU内部寄存器保存在堆栈中,完成保护现场任务;执行中断服务子程序:CPU根据中断向量表找到中断服务子程序的入口地址,跳转并执行中断服务子程序;中断返回:执行完中断服务子程序之后,CPU从堆栈中恢复中断前内部寄存器的值,继续执行中断点之后的应用程序。4.2中断系统(2)C6748中断处理与响应过程C6748中断控制器的硬件架构框图如下图所示。中断选择器(InterruptSelector)将任意系统事件路由到12个可屏蔽中断。事件组合器(EventCombiner)能够将多个系统事件合并为一个单一事件,合并后的事件经过中断选择器送至DSP内核。异常组合器可将任意系统事件组合起来送入到DSP内核的硬件异常。4.2中断系统4.2.1事件组合器事件组合器的基本原理是通过“或”运算将一组系统事件标志“合并”为一个事件;将124个事件分成4组,组内事件按“或运算”归并为一个组合事件输出。4.2.2中断选择器中断选择器能够将128个系统事件(EVT1-EVT128)分配到DSP任意一个可屏蔽中断(INT4-INT15)。事件组合器与中断选择器组合使用能够让DSP同时处理批量中断,提供了中断处理效率。4.2中断系统4.2.3异常组合器C6748的DSP内核具有一个用于系统级、可屏蔽的异常输入(EXCEP),异常组合器(ExceptionCombiner)允许多个系统事件合并为单个异常事件输入到DSP内核,图4-26所示为异常组合器的架构原理。4.2中断系统4.2.4中断向量表中断向量表/中断服务表(IST)主要功能是相应的中断发生的时候,程序要跳转到相应的中断服务地址执行相应的指令。IST中每个中断向量能够存放8条32位指令(中断服务指令包,InterruptServiceFetchPacket(ISFP)),通常会用执行跳转指令,跳转到用户定义的中断服务子函数中;标准的ISFP最后两条指令是一条跳转到中断返回指针指令(BIRP),一条是延时指令(NOP5)以便分支目标能进入流水线的执行阶段。。4.2中断系统4.2.5中断寄存器C6748的DSP内核常用中断寄存器包括中断使能寄存器(IER)、中断标志寄存器(IFR)、中断清除寄存器(ICR)、中断服务表指针寄存器(ISTP)。(1)中断使能寄存器(IER)(2)中断标志寄存器(IFR)0-----中断禁止

1-----中断使能0-----中断未发生

1-----中断已发生4.2中断系统(3)中断清除寄存器(ICR)(4)中断服务表指针寄存器(ISTP)0-----中断标志位不清除

1-----中断标志位清除

ISTB-----中断服务表(IST)地址的基地址部分。

HPEINT-----当前挂起的已使能最高优先级中断。4.3定时器TMS320C6748片上有4个64位定时器(Timer0、Timer1、Timer2、Timer3),其中定时器1(Timer1)可以配置为看门狗定时器。定时器有4个基本模式:64位通用定时器,非链式双32位定时器,链式双32位定时器,看门狗定时器(仅Timer1)。

定时器可产生周期性中断与EDMA同步事件;看门狗定时器模式用于当器件处于错误状况时提供恢复机制。4.3定时器定时器具有三种工作模式:单次工作、持续工作和周期重载持续工作。(1)单次工作:定时器运行一个周期然后停止。(2)持续工作:定时器在每个周期结束自动清零并继续工作。(3)周期重载持续工作:定时器在每个周期自动获取重载寄存器的值并继续工作。4.3定时器4.3.164位通用定时器模式

定时器处于64位递增计数器状态,两个32位的计数器寄存器(TIM12和TIM34)组成一个64位的计数寄存器,两个32位的周期寄存器(PRD12和PRD34)组成一个64位定时器周期寄存器。定时器控制寄存器(TCR)的ENAMODE12位是使能与工作模式控制位:ENAMODE12=0定时器不运行并保持当前计数值ENAMODE12=1定时器使能为单次运行,计数值自增到与周期值相等并停止ENAMODE12=2定时器使能为持续运行,计数值将自增到达到周期值,然后自行复位为0并重新开始计数ENAMODE12=3定时器使能为周期性重载持续运行,计数值将自增到达到周期值后自行复位为0,用周期重载寄存器(REL12和REL34)的值重载周期值寄存器(PRD12和PRD34),又开始计数。4.3定时器4.3.2非链式双32位定时器模式

在该模式下,64位定时器分为两个独立的32位定时器:(1)带4位预分频的32位定时器

(2)无预分频的32位定时器定时器的计数器采用TIM12计数寄存器作为32位定时器计数寄存器,采用PRD12周期寄存器作为32位定时器周期寄存器。4.3定时器4.3.2链式双32位定时器模式配置定时器全局控制寄存器(TGCR)的TIMMODE=3时,定时器为链式双32位定时器。预分频器采用TIM34计数寄存器作为32位预分频计数寄存器,采用PRD34周期寄存器作为32位预分频周期寄存器。计数器采用TIM12计数寄存器作为32位定时器计数寄存器,采用PRD12周期寄存器作为32位定时器周期寄存器。4.3定时器4.3.4看门狗定时器模式结构

配置定时器全局控制寄存器(TGCR)的TIMMODE=1、看门狗定时控制寄存器(WDTCR)的WDEN=1时定时器处于看门狗定时器模式。在看门狗定时器模式下,定时器要求周期性执行“喂狗指令”;若没有执行“喂狗指令”,定时器的计数器自增直到达到定时器周期时将产生看门狗超时事件,并导致复位整个处理器。“喂狗指令”是按照顺序先写

A5C6h

到看门狗服务密钥寄存器(WDKEY),然后再写

DA7Eh

到WDKEY来复位看门狗定时器。任何其他的写入WDKEY位都将立即触发看门狗超时事件。4.3定时器4.3.5定时器寄存器C6748片上四组定时器都有各自的控制与功能寄存器组,常用寄存器主要包括:计数寄存器(TIM12和TIM34)、周期寄存器(PRD12和PRD34)、控制寄存器(TCR)、全局控制寄存器(TGCR)、看门狗定时控制寄存器(WDTCR)、重载寄存器(REL12和REL34)、捕获寄存器(CAP12和CAP34)、中断控制和状态寄存器(INTCTLSTAT)和比较寄存器(CMP0-CMP7)。(1)定时器计数寄存器(TIM12和TIM34)

(2)定时器周期寄存器(PRD12和PRD34)4.3定时器(3)定时器控制寄存器(TCR)4.3定时器(3)定时器全局控制寄存器(TGCR)(4)看门狗定时器控制寄存器(WDTCR)4.3定时器4.3.6定时器实例

(1)64位通用定时器实例【例4-2】实现64位通用定时器功能,LED间隔1秒循环点亮。/***********定时器初始化函数******************************/void

TimerInit(void){//配置

定时器2为64位模式TMR_CFG_64BIT_CLK_INT=0x00000013u

TimerConfigure(SOC_TMR_2_REGS,TMR_CFG_64BIT_CLK_INT);//设置周期

TimerPeriodSet(SOC_TMR_2_REGS,TMR_TIMER12,TMR_PERIOD_LSB32);

TimerPeriodSet(SOC_TMR_2_REGS,TMR_TIMER34,TMR_PERIOD_MSB32);//使能

定时器2

TimerEnable(SOC_TMR_2_REGS,TMR_TIMER12,TMR_ENABLE_CONT);}

/***********定时器中断初化****************************/void

TimerInterruptInit(void){ //注册中断服务函数

IntRegister(C674X_MASK_INT4,TimerIsr); //映射中断到DSP可屏蔽中断

IntEventMap(C674X_MASK_INT4,SYS_INT_T64P2_TINTALL); //使能DSP可屏蔽中断

IntEnable(C674X_MASK_INT4); //使能定时器中断

TimerIntEnable(SOC_TMR_2_REGS,TMR_INT_TMR12_NON_CAPT_MODE);}

4.3定时器4.3.6定时器实例

(1)64位通用定时器实例【例4-2】实现64位通用定时器功能,LED间隔1秒循环点亮。/************中断服务函数************************************/void

TimerIsr(void){//禁用定时器中断

TimerIntDisable(SOC_TMR_2_REGS,TMR_INT_TMR12_NON_CAPT_MODE);//清除中断标志

IntEventClear(SYS_INT_T64P2_TINTALL);

TimerIntStatusClear(SOC_TMR_2_REGS,TMR_INT_TMR12_NON_CAPT_MODE);//改变LED状态,两个LED对应引脚GPIO6[12]、GPIO6[13]

GPIOPinWrite(SOC_GPIO_0_REGS,109,Flag);Flag=!Flag;

GPIOPinWrite(SOC_GPIO_0_REGS,110,Flag);//使能定时器中断

TimerIntEnable(SOC_TMR_2_REGS,TMR_INT_TMR12_NON_CAPT_MODE);}

4.3定时器4.3.6定时器实例

(2)非链式双32位定时器实例【例4-3】使用的定时器1非链式双32位模式,使两个LED灯分别以1s、2s为周期闪烁。/***********定时器初始化函数******************************/void

TimerInit(void){//配置定时器1为非链式双32位模TMR_CFG_32BIT_UNCH_CLK_BOTH_INT=0x00000017uTimerConfigure(SOC_TMR_1_REGS,TMR_CFG_32BIT_UNCH_CLK_BOTH_INT);//设置周期

TimerPeriodSet(SOC_TMR_1_REGS,TMR_TIMER12,TMR_PERIOD12);TimerPeriodSet(SOC_TMR_1_REGS,TMR_TIMER34,TMR_PERIOD34);TimerPreScalarCount34Set(SOC_TMR_1_REGS,TMR_Prescale);//使能定时器1TimerEnable(SOC_TMR_1_REGS,TMR_TIMER_BOTH,TMR_ENABLE_CONT);}/***********定时器中断初化****************************/voidTimerInterruptInit(void){ //注册中断服务函数IntRegister(C674X_MASK_INT4,Timer12Isr);

IntRegister(C674X_MASK_INT5,Timer34Isr); //映射中断到DSP可屏蔽中断

IntEventMap(C674X_MASK_INT4,SYS_INT_T64P1_TINT12);

IntEventMap(C674X_MASK_INT5,SYS_INT_T64P1_TINT34); //使能DSP可屏蔽中断

IntEnable(C674X_MASK_INT4);

IntEnable(C674X_MASK_INT5); //使能定时器/计数器中断

TimerIntEnable(SOC_TMR_1_REGS,TMR_INT_TMR12_NON_CAPT_MODE|TMR_INT_TMR34_NON_CAPT_MODE);}

4.3定时器4.3.6定时器实例

(2)非链式双32位定时器实例【例4-3】使用的定时器1非链式双32位模式,使两个LED灯分别以1s、2s为周期闪烁。/************中断服务函数************************************/voidTimer12Isr(void){//禁用定时器中断

TimerIntDisable(SOC_TMR_1_REGS,TMR_INT_TMR12_NON_CAPT_MODE);//清除中断标志

IntEventClear(SYS_INT_T64P1_TINT12);

TimerIntStatusClear(SOC_TMR_1_REGS,TMR_INT_TMR12_NON_CAPT_MODE);//改变LED状态,LED对应引脚GPIO6[12]

Flag12=!Flag12;GPIOPinWrite(SOC_GPIO_0_REGS,109,Flag);//使能定时器中断

TimerIntEnable(SOC_TMR_1_REGS,TMR_INT_TMR12_NON_CAPT_MODE);}voidTimer34Isr(void){//禁用定时器/计数器中断TimerIntDisable(SOC_TMR_1_REGS,TMR_INT_TMR34_NON_CAPT_MODE);//清除中断标志IntEventClear(SYS_INT_T64P1_TINT34);TimerIntStatusClear(SOC_TMR_1_REGS,TMR_INT_TMR34_NON_CAPT_MODE);//改变LED状态,LED对应引脚GPIO6[13]Flag34=!Flag34;GPIOPinWrite(SOC_GPIO_0_REGS,110,Flag);//使能定时器中断TimerIntEnable(SOC_TMR_1_REGS,TMR_INT_TMR34_NON_CAPT_MODE);}4.3定时器4.3.6定时器实例

(3)链式双32位定时器实例【例4-4】使用定时器1链式双32位模式,LED间隔1秒循环点亮。/***********定时器初始化函数******************************/void

TimerInit(void){//配置定时器1为链式双32位模式TMR_CFG_32BIT_CH_CLK_INT=0x0000001Fu

TimerConfigure(SOC_TMR_1_REGS,TMR_CFG_32BIT_CH_CLK_INT);//设置周期

TimerPeriodSet(SOC_TMR_1_REGS,TMR_TIMER12,TMR_PERIOD12);Time

温馨提示

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

评论

0/150

提交评论