DSP5-F28335中断系统及定时器
DSP28035CPU定时器中断设置
DSP28035CPU定时器中断设置#include "DSP281x_Device.h"#include "DSP281x_Examples.h"//定时器中断服务程序声明interrupt void cpu_timer0_isr(void);void main(void){InitSysCtrl(); //初始化系统控制寄存器、PLL、看门狗和时种//Step 2. 初始化 GPIO//InitGpio(); //本例中没有使⽤,跳过//Step 3. 清除所有中断,初始化PIE中断向量表DINT; //关CPU中断InitPieCtrl(); //初始化PIE控制寄存器组到默认状态,这个⼦程序在DSP281x_PieCtrl.cIER = 0x0000; //禁⽌所有CPU中断IFR = 0x0000; //清除所有CPU中断标志位InitPieVectTable(); //初始化PIE中断向量表,这个⼦程序在DSP281x_PieVect.cEALLOW; //关保护PieVectTable.TINT0 = &cpu_timer0_isr; //中断向量指向中断服务程序EDIS; //开保护InitCpuTimers(); //初始化定时器寄存器组ConfigCpuTimer(&CpuTimer0, 100, 1000000);//配置CPU-Timer 0 中断周期为1s,100MHz CPU频率,可以根据频率改变实参StartCpuTimer0(); //启动定时器 0//Step 5. ⽤户代码,打开中断IER |= M_INT1; //使能第⼀组PIE中断PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能第⼀组的中断7EINT; //使能全局中断ERTM; //使能DEBUG中断//Step 6. 空循环,等待中断for(;;);}//中断服务⼦程序interrupt void cpu_timer0_isr(void){CpuTimer0.InterruptCount++;//⽤户可以在此处添加⾃⼰的代码,以完成某些特定的功能PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//响应这个中断,以便CPU继续接收第1组中断}。
单片机开发 F28335中断系统
2.2 使能/禁止复用外设中断的处理 应用外设中断的使能/禁止标志位使能/禁止外设中断,PIEIER
和CPU IER寄存器主要是在同一组中断内设置中断优先级。如果要 修改PIEIER寄存器的设置,有两种方法。第一种方法是保护相应的 PIE标志寄存器标志位,防止中断丢失。第二种方法是清除相应的 PIE寄存器的标志位。
(4)使能CPU中断及全局中断,这个通过对IER和EINT寄存器相应位设置进 行使能或者失能。比如外部中断1,其代码如下:
IER |= M_INT1; // 使能CPU中断1(INT1)
EINT;
// 开全局中断
(5)编写中断服务函数
配置好中断后如果有触发,即会进入中断服务函数,中断服务函数名在前 面已定义好,所以要保证一致,否则将不会进入中断服务函数内执行。在 DSP28335软件开发中,要在中断服务函数名前加上关键字interrupt。例如 外部中断1的中断服务函数:
F28335中断系统
本讲主要内容
1.中断介绍 2.中断操作 3.中断相关寄存器 4.中断配置
1.中断介绍
1.1 中断概念 中断其实就是当 CPU 执行程序时,由于发生了某种随机的事件
(外部或内部),引起 CPU 暂时中断正在运行的程序,转去执行一 段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事 件,该事件处理完后又返回被中断的程序继续执行,这一过程就称 为中断,引发中断的称为中断源。
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4
(2)使能外设中断,这个具体是由外设相关中断使能位来控制, 比如外部中断1,这个可由外部中断1的控制寄存器中相应中断使能 位来控制。
XIntruptRegs.XINT1CR.bit.ENABLE= 1;
第四章 F2833x系统时钟及中断控制-TMS320F28335 DSP原理、开发及应用-符晓
看门狗计数器独立于CPU而运行 看门狗计数器溢出时,产生复位或者中断
CPU正常运行时看门狗计数器被定时复位,即“喂狗” 150MHz的时钟频率相当于6.67ns,看门狗计数器是16
位的,从0开始计数到计满溢出是65536个数,即 6.67ns*65536=4.396ms
第四章 系统时钟及中断控制
4.1 F2833x OSC与PLL (对应: SysCtrl.c)
3.3V时钟脉冲输入
外部晶振
片上振 荡器
PLL工作模式 XRS
表4-1 PLL工作模式
工作模式介绍
PLLSTS[DIVSEL]
PLL关闭
通过将PLLSTS寄存器中的PLLOFF位置1可将PLL模块关闭,从而减少
2-0
HSPCLK
ADC
2-0
LSPCLK
SCI / SPI / I2C / McBSP
4.2 外设时钟信号的寄存器
SysCtrlRegs.PCLKCR0
15
14
13
ECANB ECANA MA ENCLK ENCLK ENCLK
7
6
5
reserved reserved
SCIC ENCLK
12
MB ENCLK
0,1
系统噪声并减少功率损耗。在进入此模式前应首先将PLLCR寄存器设为
0x0000。
2
3
PLL旁路
上电复位或 复位后,PLL进入该模式。在该模式下时钟信号直接绕过
0,1
PLL模块,但PLL模块却未关闭。
2
3
PLL使能
向PLLCR寄存器中写入非零的数可使能PLL模块,一旦写入数据后,PLL
TMS320F28335外部中断总结
TMS320F28335外部中断总结作者:Free 文章来源:Free 点击数:93 更新时间:2010-8-26在这里我们要十分清楚DSP的中断系统。
C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13和14。
这样还有12个中断都直接连接到外设中断扩展模块PIE上。
说的简单一点就是PIE 通过12根线与28335核的12个中断线相连。
而PIE的另外一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。
这样PIE共管理12*8=96个外部中断。
这12组大中断由28335核的中断寄存器IER来控制,即IER确定每个中断到底属于哪一组大中断(如IER |= M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需要再由PIEIER确定)。
接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU(我们不难想象到PIEIER共有12总即从PIEIER1-PIEIER12)。
另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同样CPU的IFR寄存器是中断组的标志寄存器。
由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。
除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。
而PIE和CPU的中断标志寄存器由硬件来清零。
EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.XINT2 = &ISRExint; //告诉中断入口地址EDIS; // This is needed to disable write to EALLOW protected registersPieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block使能PIE PieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第一组中的中断5IER |= M_INT1; // Enable CPU 第一组中断EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM也就是说,12组中的每个中断都要完成上面的相同配置,剩下的才是去配置自己的中断。
DSP28335的调试总结,这是一份总结很全面的资料,我在学
DSP28335的调试总结,这是一份总结很全面的资料,我在学习开发板的一些总结,希望能得到同行的帮助,愿与大家一起学习和分享1DSP的PWM信号1.1简介DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。
初始化程序采用的计数模式为递增计数模式。
在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。
然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:1.2端口对应关系说明:JP0B的端口号按“Z”字形顺序数。
1.3初始化程序注释void InitPwm1AB(float32f){Uint16T= 2343750/f-1.0;//系统时钟SYSCLKOUT=150MHz,TBCLK=6.6666667ns,在连续增计数模式下,f=150000000/(TBPDR+1) EALLOW;//先初始化通用输入输出口//GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;EPwm1Regs.TBPHS.half.TBPHS= 0; // 在相位寄存器中设置计数器的起始计数位置//下面两条语句组合对PWM的时钟进行分频EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T; //在周期寄存器中设置计数器的计数周期//TBCTL为定时器控制寄存器EPwm1Regs.TBCTL.bit.CTRMODE= TB_COUNT_UP; //设置计数模式位为连续增计数模式,产生对称方波EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 将定时器相位使能位关闭EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;//映射寄存器SHADOW使能并配置映射寄存器为自动读写EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 定时器时钟源选择,一共有四种时钟源EPwm1Regs.CMPA.half.CMPA= 0.0001*T;// 设置EPWM1A比较值寄存器的比较值,即体现EPWM1A的占空比EPwm1Regs.CMPB= 0.0001*T;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//A模块比较模式EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//B模块比较模式EPwm1Regs.CMPCTL.bit.LOADAMODE= CC_CTR_ZERO; // A模块比较使能,通过写0来清除SHDWAMODE位来使能load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // B模块比较使能,通过写0来清除SHDWBMODE位来使能load on CTR=Zero//AQCTLA为输出A比较方式控制寄存器EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // TBCTR(计数器)计到零时使输出为反向EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//TBCTR(计数器)与CMPA在up 计数时相等使输出为high,这关系的输出的占空比EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;}2DSP的CAN通信2.1CAN2.0B协议简述TMS320F28335上有2个增强型CAN总线控制器,符合CAN2.0B协议,其总线波特率可达到1Mbps。
基于F28335的通过定时器中断控制LED
基于F28335的通过定时器中断控制LED#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File// Prototype statements for functions found within this file.interrupt void cpu_timer0_isr(void); //中断函数//interrupt void cpu_timer1_isr(void);//interrupt void cpu_timer2_isr(void);//#define mem (*(unsigned short int *)0x200000)#define LED (*(unsigned short int *)0x180000)#define startCpuTimer0() CpuTimer0Regs.TCR.bit.TSS=0 //停止定时器int i=0,ncount;unsigned int uLBD;void main(void){// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP2833x_SysCtrl.c file.InitSysCtrl();// Step 2. Initalize GPIO:// This example function is found in the DSP2833x_Gpio.c file and// illustrates how to set the GPIO to it's default state.// InitGpio(); // Skipped for this exampleInitXintf16Gpio(); //zq// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interruptsDINT; //Disable Interrupt 禁止中断// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the DSP2833x_PieCtrl.c file.InitPieCtrl(); //初始化PIE模块// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in DSP2833x_DefaultIsr.c.// This function is found in DSP2833x_PieVect.c.InitPieVectTable();// Interrupts that are used in this example are re-mapped to // ISR functions found within this file.EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr;//PieVectTable.XINT13 = &cpu_timer1_isr;//PieVectTable.TINT2 = &cpu_timer2_isr;EDIS; // This is needed to disable write to EALLOW protected registers// Step 4. Initialize the Device Peripheral. This function can be // found in DSP2833x_CpuTimers.cInitCpuTimers(); // For this example, only initialize the Cpu Timers#if (CPU_FRQ_150MHZ)// Configure CPU-Timer 0, 1, and 2 to interrupt every second: // 150MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 150, 1000000);//ConfigCpuTimer(&CpuTimer1, 150, 1000000);//ConfigCpuTimer(&CpuTimer2, 150, 1000000);#endif#if (CPU_FRQ_100MHZ)// Configure CPU-Timer 0, 1, and 2 to interrupt every second: // 100MHz CPU Freq, 1 second Period (in uSeconds)ConfigCpuTimer(&CpuTimer0, 100, 1000000);//ConfigCpuTimer(&CpuTimer1, 100, 1000000);//ConfigCpuTimer(&CpuTimer2, 100, 1000000);#endif// To ensure precise timing, use write-only instructions to write to the entire register. Therefore, if any// of the configuration bits are changed in ConfigCpuTimer and InitCpuTimers (in DSP2833x_CpuTimers.h), the// below settings must also be updated.//CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0//CpuTimer1Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0//CpuTimer2Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0// Step 5. User specific code, enable interrupts:CpuTimer0Regs.PRD.all=0xffff;CpuTimer0Regs.TPR.all=0;CpuTimer0Regs.TIM.all=0;CpuTimer0Regs.TPRH.all=0;CpuTimer0Regs.TCR.bit.TSS=1;CpuTimer0Regs.TCR.bit.SOFT=1;CpuTimer0Regs.TCR.bit.FREE=1;CpuTimer0Regs.TCR.bit.TRB=1;CpuTimer0Regs.TCR.bit.TIE=1;CpuTimer0.InterruptCount=0;startCpuTimer0();// Enable CPU int1 which is connected to CPU-Timer 0, CPU int13// which is connected to CPU-Timer 1, and CPU int 14, which is connected// to CPU-Timer 2:IER |= M_INT1; //开CPU中断1//IER |= M_INT13;//IER |= M_INT14;// Enable TINT0 in the PIE: Group 1 interrupt 7PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //使能PIE模块中的CPU定时器0的中断// Enable global Interrupts and higher priority real-time debug events: EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM// Step 6. IDLE loop. Just sit and loop forever (optional):for(;;){}}interrupt void cpu_timer0_isr(void){CpuTimer0.InterruptCount++;// Acknowledge this interrupt to receive more interruptsfrom group 1PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;CpuTimer0Regs.TCR.bit.TIF=1;CpuTimer0Regs.TCR.bit.TRB=1;if(ncount==0){ LED=uLBD;uLBD++;uLBD%=16;}ncount++;ncount%=194; }。
DSP实验四TMS320F28335 定时器 中断 IO中断 控制LED亮灭
DSP实验四TMS320F28335 定时器中断 IO中断控制LED亮灭dsp实验四、tms320f28335定时器中断io中断控制led亮灭继续我的第四个实验;实现定时器中断功能处理ld4翻转,按键IO中断控制ld3翻转;学习目的:中断寄存器的设置,io中断、定时器中断的使用,F28335有三个定时器:定时器0、定时器1和定时器2(定时器2也可用于DSP/BIOS);功能描述:开机时Ld3和ld4默认关闭;初始化完成后,ld4以1hz(1s)频率做状态翻转;ld3接受按键控制,每触发一次按键,状态翻转一次。
电路连接说明:Ld4和ld3设置为通用GPIO上拉输出。
初始化后,输出LED默认熄灭;Ld4和ld3控制LED灯的负极,如下图所示;本次实验选用定时器0,程序时刻读取计数器的值,当值为0时,产生定时器0中断,ld4状态翻转;IO键SW12中断控制ld3状态反转。
定时器0中断程序设计说明:第一步。
定时器0的预设寄存器和计数器设置:定时器输入时钟为sysclkout(=135mhz),1、如果定时1s(即1hz)中断一次(即计数结束),1hz=135mhz/1350/100000预分频器寄存器(即分频器)设置为1350,计数器设置为100000;2、如果定时1ms(即1000hz)中断一次,计算公式为:1000hz=135mhz/1350/100预设寄存器也设置为1350,计数器设置为100;转让声明如下://定时器0设为1hz=135mhz/(1350*100000)cputimer0regs。
珠三角。
全部=100000;//计数周期寄存器。
10万次循环后,计数器降至0putimer0regs tpr。
一点tddr=1350&0xff;//0x546预分频器寄存器(预分频器)cputimer0regs.tprh.bit.tddrh=(1350>>8)&0x00ff;//0x546预定标寄存器(预分频器)第二步a)设置定时器0相关中断寄存器使能定时器0中断,即cputimer0regs.tcr.bit.tie=1;//启用计时器0中断b)设置饼图级别相关中断寄存器,以启用计时器0中断所在的饼图组,即pieierx寄存器设置C)设置CPU级别中断相关寄存器,CPU级别启用与上述饼图对应的通道,即ier寄存器设置步骤3中断向量入口映射位置设置,如下:eallow;//thisisneededtowritetoeallowprotectedregisters皮埃维克塔。
DSPF28335---中断系统
DSPF28335---中断系统28335的中断系统中断概述通过硬件或软件驱动的信号,使CPU将当前的程序挂起,执行另一个称为中断服务子程序称为中断。
28335内部有16根中断线,其中有两个不可屏蔽中断(RESET、NMI)与16个可屏蔽中断(INT1-14、RTOSINT、DLOGINT),这里主要说明INT1-14。
在28335中,CPU定时器1、2一般预留给实时操作系统使用,中断线单独分配给INT13、INT14。
其余12个可屏蔽中断直接连接在外设中断扩展模块PIE上,供外部中断和处理器内部单元使用。
这就有一个问题,28335内部有很多个外设模块,这些外设都有自己的中断而且有很多个,那么剩余12个中断怎么够用。
为了解决这个问题所有引入PIE模块。
PIE通过12根线与28335核的12个中断线相连。
而PIE的另外一侧有12*8=96根线分别连接到外设,如AD、SPI、EXINT等等。
说明:PIE和CPU的中断标志寄存器由硬件来清零;但外部中断的标志位要通过软件来清零。
一.三级中断1.外设级中断如果有外设产生中断事件,则寄存器中相应的中断标志位被置一,如果相应的中断使能为(IE)被置位,那么外设就像PIE发出一个中断请求。
如果外设使能位没有被置位,那么中断标志(IF)位将保持为1直到软件清除。
2.PIE中断对于复用的中断源,PIE模块有相应的标志寄存器[PIEIFR(x,y) x=1-12,y=1-8]和中断使能寄存器PIEIER(x,y) ;对于每一个PIE中断组来说还有一个中断应答寄存器PIEACKx。
当有中断请求进入PIE模块的时候,如果相应的PIE中断标志位PIEIFR(x.y)和中断使能寄存器PIEIER(x,y)置1;这是PIE控制器就会检查PIEACKx标志位看CPU是否已经准备好接收这个PIE中断组的中断。
明:如果PIEACKZx被清零,PIE会把这个中断请求送到CPU级的INTx。
DSP第5章-F28335-概述
3个32位CPU定时器:定时器0、1、2。T0、T1为一般定时器 ,T0连接至PIE,T1连接至中断INT13,T2用作DSP/BIOS的
5.1 F28335的性能
串行端口外设:2个eCAN2.0B; 3个SCI(UART);2个 McBSP;1个SPI; 1个I2C总线接口。
16通道12位模数转换模块:转换时间80ns,2X8通道复用输入 接口;2个采样保持电路;单/连续通道转换;内部或外部参考电 压
5.5 总结
外设帧的寄存器映射如下图所示。
5.5 总结
外设帧的寄存器映射如下图所示。
5.6 F28335与F2812的比 较
5.6 F28335与F2812的比 较
5.3.5 Flash的流水线模式
可提高Flash中线性代码的执行效率 对FOPT寄存器中的ENPIPE置位来使能流水线模式 独立于CPU的流水线模式
5.3.6 Flash 和OTP的寄存器
19_TMS320F28335之中断系统(包你明白)
TMS320F28335项目开发记录9_28335之中断系统1.中断系统在这里我们要十分清楚DSP的中断系统。
C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13和14。
这样还有12个中断都直接连接到外设中断扩展模块PIE上。
说的简单一点就是PIE通过12根线与28335核的12个中断线相连。
而PIE的另外一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。
PIE共管理12*8=96个外部中断。
这12组大中断由28335核的中断寄存器IER来控制,即IER确定每个中断到底属于哪一组大中断(如IER |= M_INT12; 说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需要再由PIEIER确定)。
接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU (我们不难想象到PIEIER共有12总即从PIEIER1-PIEIER12)。
另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同样CPU的IFR寄存器是中断组的标志寄存器。
由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。
除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。
而PIE和CPU的中断标志寄存器由硬件来清零。
1. EALLOW; // This is needed to write to EALLOW protected registers2. PieVectTable.XINT2 = &ISRExint; //告诉中断入口地址3. EDIS; // This is needed to disable write to EALLOW protected registers4. PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block使能PIE5. PieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第一组中的中断56. IER |= M_INT1; // Enable CPU 第一组中断7. EINT; // Enable Global interrupt INTM8. ERTM; // Enable Global realtime interrupt DBGM也就是说,12组中的每个中断都要完成上面的相同配置,剩下的才是去配置自己的中断。
F28335系统控制与中断
6.5 TMS320F28335外设中断扩展
6.5.2 向量表映射
第34页/共54页
6.5 TMS320F28335外设中断扩展
6.5.3 中断源
第35页/共54页
6.5 TMS320F28335外设中断扩展
6.5.3 中断源
第36页/共54页
6.5 TMS320F28335外设中断扩展
通过pieierx的相关位禁止中断并清除对应的pieifrx相关位3外设中断复用请求流程65tms320f28335外设中断扩展pie中断向量表65tms320f28335外设中断扩展pie中断向量表65tms320f28335外设中断扩展654pie配置寄存器pie控制寄存器pie中断答应寄存器pie中断标志寄存器pie中断使能寄存器65tms320f28335外设中断扩展654pie配置寄存器65tms320f28335外设中断扩展654pie配置寄存器65tms320f28335外设中断扩展654pie配置寄存器65tms320f28335外设中断扩展654pie配置寄存器65tms320f28335外设中断扩展655cpu中断寄存器65tms320f28335外设中断扩展655cpu中断寄存器65tms320f28335外设中断扩展655cpu中断寄存器65tms320f28335外设中断扩展655cpu中断寄存器65tms320f28335外设中断扩展655cpu中断寄存器65tms320f28335外设中断扩展656外部中断控制寄存器f28335共支持7个外部中断xint1int7xint13还有一个不可屏蔽的外部中断xnmi共用中断源
第53页/共54页
2、外部NMI中断控制寄存器(XNMICR)
3、外部中断x计数器(XINTxCTR) 4、外部NMI中断x计数器(XNMICTR),位定义与上相同
DSP28335的调试总结,这是一份总结很全面的资料,我在学
DSP28335的调试总结,这是一份总结很全面的资料,我在学习开发板的一些总结,希望能得到同行的帮助,愿与大家一起学习和分享1DSP的PWM信号1.1简介DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。
初始化程序采用的计数模式为递增计数模式。
在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。
然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:1.2端口对应关系通道相应PWM的A/B对应JP0B端口号1ePWM1A92ePWM1B103ePWM2A114ePWM2B125ePWM3A136ePWM3B147ePWM4A158ePWM4B169ePWM5A1710ePWM5B1811ePWM6A1912ePWM6B20说明:JP0B的端口号按“Z”字形顺序数。
1.3初始化程序注释void InitPwm1AB(float32f){Uint16T= 2343750/f-1.0;//系统时钟SYSCLKOUT=150MHz,TBCLK=6.6666667ns,在连续增计数模式下,f=150000000/(TBPDR+1) EALLOW;//先初始化通用输入输出口//GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;EPwm1Regs.TBPHS.half.TBPHS= 0; // 在相位寄存器中设置计数器的起始计数位置//下面两条语句组合对PWM的时钟进行分频EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T; //在周期寄存器中设置计数器的计数周期//TBCTL为定时器控制寄存器EPwm1Regs.TBCTL.bit.CTRMODE= TB_COUNT_UP; //设置计数模式位为连续增计数模式,产生对称方波EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 将定时器相位使能位关闭EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;//映射寄存器SHADOW使能并配置映射寄存器为自动读写EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 定时器时钟源选择,一共有四种时钟源EPwm1Regs.CMPA.half.CMPA= 0.0001*T;// 设置EPWM1A比较值寄存器的比较值,即体现EPWM1A的占空比EPwm1Regs.CMPB= 0.0001*T;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//A模块比较模式EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//B模块比较模式EPwm1Regs.CMPCTL.bit.LOADAMODE= CC_CTR_ZERO; // A模块比较使能,通过写0来清除SHDWAMODE位来使能load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // B模块比较使能,通过写0来清除SHDWBMODE位来使能load on CTR=Zero//AQCTLA为输出A比较方式控制寄存器EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // TBCTR(计数器)计到零时使输出为反向EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//TBCTR(计数器)与CMPA在up 计数时相等使输出为high,这关系的输出的占空比EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;}2DSP的CAN通信2.1CAN2.0B协议简述TMS320F28335上有2个增强型CAN总线控制器,符合CAN2.0B协议,其总线波特率可达到1Mbps。
DSP实验四、TMS320F28335 定时器 中断 IO中断 控制LED亮灭
继续我的第四个实验;实现定时器中断函数处理LD4翻转、按键IO中断控制LD3翻转;学习目的:中断寄存器的设置,IO中断、定时器中断的使用,F28335共有三个定时器:timer0、timer1、timer2(timer2也可用于DSP/BIOS);功能描述:上电默认LD3、LD4灭;初始化完成后,LD4以1HZ(1S)频率做状态翻转;LD3接受按键控制,每触发一次按键,状态翻转一次。
电路连接说明:LD4、LD3设置为通用GPIO 上拉输出初始化后默认为输出LED灯灭状态;LD4、LD3控制LED灯的负极,如下图;本次实验选用定时器0,程序时刻读取计数器的值,当值为0时,产生定时器0中断,LD4状态翻转;IO按键SW12中断控制LD3状态翻转。
定时器0中断程序设计说明:步骤一、定时器0的预定标寄存器和计数器设置:定时器输入时钟为sysclkout(=135MHz),1、如果定时1S(即1Hz)中断一次(即计数结束),1Hz=135Mhz/1350/100000预定标寄存器(即分频器)设为1350,计数器设为100000;2、如果定时1ms(即1000Hz)中断一次,计算公式为:1000Hz=135Mhz/1350/100预定标寄存器同样设为1350,计数器设为100;赋值语句如下://定时器0 设为1Hz = 135MHz/(1350*100000)CpuTimer0Regs.PRD.all= 100000;//计数周期寄存器,100000周期后计数器减为0CpuTimer0Regs.TPR.bit.TDDR= 1350& 0xFF;//0x546 预定标寄存器(预分频器)CpuTimer0Regs.TPRH.bit.TDDRH = (1350>>8) & 0x00FF;//0x546 预定标寄存器(预分频器)步骤二、a)设置定时器0相关中断寄存器使能定时器0中断,即CpuTimer0Regs.TCR.bit.TIE= 1; //使能定时器0中断b)设置PIE级相关中断寄存器定时器0中断所在PIE组使能,即PIEIERx寄存器设置c)设置CPU级中断相关寄存器CPU级使能上述PIE对应的通道,即IER寄存器设置步骤三、中断向量入口映射位置设置,如下:EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr; //将中断函数物理地址赋值给中断向量入口PieVectTable.XINT3 = &key_GPIO50_isr;EDIS; // This is needed to disable write to EALLOW protected registersIO中断程序设计说明:步骤一、设置IO引脚功能复用寄存器为普通IO、设为上拉、输入状态、使能引脚滤波功能;外部中断源选择寄存器设置:如GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=50;//按键引脚编号设置步骤二、使能外部中断源中断;XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中断设置触发方式:XIntruptRegs.XINT3CR.bit.POLARITY=0;//下降沿触发剩余步骤同定时器0中断的设置。
f28335统计代码运行时间
f28335统计代码运行时间
在F28335控制器上统计代码运行时间可以采用以下几种方法:
1. 使用定时器,F28335控制器上有多个定时器可以用来测量
代码运行时间。
你可以在代码的开始和结束处分别启动和停止定时器,并通过读取定时器的计数器值来计算代码的运行时间。
这种方
法的优点是简单易行,但精度可能不够高,受到定时器分辨率的限制。
2. 使用周期计数器,F28335控制器上有一个周期计数器可以
用来测量代码的运行时间。
你可以在代码的开始和结束处分别读取
周期计数器的值,并计算两个值之间的差值来得到代码的运行时间。
这种方法的优点是精度较高,但需要手动编写代码来读取和计算周
期计数器的值。
3. 使用性能分析工具,F28335控制器上有一些性能分析工具
可以帮助你统计代码的运行时间,如Event Manager和Profiler。
这些工具可以自动记录代码的执行时间,并生成相应的报告。
使用
性能分析工具可以更方便地获取代码的运行时间信息,但需要一些
额外的配置和设置。
无论使用哪种方法,你需要在代码的关键位置插入相应的测量代码,并将测量结果输出或记录下来。
在实际使用中,你可能需要多次运行代码并取平均值,以得到更准确的运行时间。
需要注意的是,测量代码运行时间可能会对代码的性能产生一定的影响,特别是在使用定时器或周期计数器的情况下。
因此,在实际应用中,你需要权衡测量的精度和对代码性能的影响,并根据具体需求选择适合的方法。
28335实现定时功能
28335实现定时功能:本学期学习了DSP控制技术,对28335定时功能进行查阅及学习相关内容。
TMS320F28335的CPU Time有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。
这三个定时器的中断信号分别为TINT0、TINT1、TINT2,分别对应于中断向量INT1,INT13,INT14。
其中,TIMH:TIM为计数寄存器,PRDH:PRD为周期寄存器,形如AH格式:A的形式表示一个32位的寄存器,是由两个16位的寄存器构成,AH是高16位,A是低16位。
CPU定时器的计数复位时,计数寄存器TIMH:TIM加载周期寄存器PRDH:PRD所设定的值,经历一个计数器时钟后,TIMH:TIM内的值就减1,一直减到0,这时产生定时器周期中断事件,并重新装载PRDH:PRD所设定的值,重新开始计数。
至于每隔多少时间,计数寄存器TIMH:TIM的值才会减1则由预分频寄存器TPRH:TPR来决定。
TPRH和TPR这两个寄存器由两部分组成,高8位为定时器预分频计数器PSC,低8位是定时器分频TDDR。
也即是说,TPRH是由PSCH和TDDRH构成,而TDDR由PSC和TDDR构成。
复位时,PSCH:PSC加载TDDRH:TDDR 所设定的值,然后经过一个CPU时钟,PSCH:PSC的值减1,当PSCH:PSC 的值减到0时,会再次装载TDDRH:TDDR所设定的值,并且产生一个计数器时钟,TIMH:TIM减1。
以上寄存器测值在配置函数ConfigCpuTimer(struct CPUTIMER_V ARS *Timer, float Freq, float Period)中设置。
形参Timer为第几位定时器,Freq为定时频率,Period为计时周期。
假若Freq为15,Period为1000000,则时间t = 1*15*1000000/150M = 0.1s (系统时钟频率为150M)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CPU定时器0 CPU定时器2 CPU定时器1
பைடு நூலகம்
GPIO MUX
注:外部中断3…7类似: 引脚对应GPIO32…63; 参见TI手册SPRUFB0D。
MUX
MUX
MUX
1
DMA
中断控制 XNMICR[15:0] XNMICTR[15:0]
XNMI_ XINT13
锁存
…
GPIOXNMISEL(4:0)
4、中断相关寄存器 a、中断标志寄存器--IFR
D15
D14
RTOSINT DLOGINT
RW-0
RW-0
D13 INT14
RW-0
D12 INT13
RW-0
……
D0 INT1
RW-0
Dx=1时,对应的中断请求信号已发生; Dx=0时,对应的中断请求信号未发生。
CPU响应中断后,对应的中断标志位自动清0。
全国教育科学“十一五”规划课题研究成果
《 DSP控制器原理与应用教程》
---基于TMS320F28335 & CCS5
主编 李全利 马骏杰 张思艳
高等教育出版社 2016.11
第五章 F28335中断系统及定时器
(一)、F28335的中断系统 (二)、F28335的CPU定时器 (三)、中断和CPU定时器应用示例
MUX INT12
(使能)
PIEIER12[INTx8:INTx1]
PIEACK
PIEACK[11]
INT1.1
PieCtrlRegs.PIEIER1.bit.INTx7=1
INT1.7 INT1.8
(标志)
PIEIFR1[INTx8:INTx1]
(使能)
PIEIER1[INTx8:INTx1]
MUX INT1
INT1.1 ……
INT1.8 ……
T
ST0
AH
AL
PH
PL
AR1
AR0
DP
ST1
DBGSTAT IER
PC(msw) PC(lsw)
3、CPU中断向量
该地址中:003F FC00H
向量表存储ISR入口地址。通常使用的是PIE向量表。
CPU中断向量映射
VMAP,ST1的bit3。复位默认值为1; M0M1MAP,ST1的bit11。复位默认值为1; ENPIE,PIECTRL的bit0。复位值默认为0,复位向 量总是取自BROM向量表(仅用到了复位向量);复位 后用户程序要完成初始化PIE向量表,并对PIE中断向 量表完成使能。
…
PIE
XINT1 XINT1CR[15:0] ADC
96个中断
DMA XINT1CTR[15:0]
XINT2
中断控制 XINT2CR[15:0]
GPIOXINT1SEL(4:0)
XINT2SOC
锁存
…
MUX
GPIO0.int
DMA XINT2CTR[15:0]
GPIOXINT2SEL(4:0)
TINT0
b、中断使能寄存器--IER
D15
D14
RTOSINT DLOGINT
RW-0
RW-0
D13 INT14
RW-0
D12 INT13
RW-0
……
D0 INT1
RW-0
Dx=1时,对应的中断使能; Dx=0时,对应的中断禁止。
操作方式: extern cregister volatiles unigned int IER;
注:此位写1清0.
PIEACK PIEACK[0]
PieCtrlRegs.PIEACK.all=0x0001
2、PIE中断向量表映射
a、定义函数型指针变量
在DSP2833x_PieVect.h文件中有定义: typedef interrupt void (*PINT)(void); PINT为指向interrupt型函数的指针
INT13
INT14
DLOGINT
RTOSINT
NMI
NMI
DMA Clear
外设(SPI,SCI,McBSP,CAN,I2C ) (ePWM,eCAP,eQEP,ADC)
WAKEINT DMA
Sync SYSCLKOUT
WDINT LPMINT
看门狗 低功耗模式
MUX
中断控制
XINT1 锁存
IFR[15:12]
(标志)
IER[15:12]
(使能)
IFR[11:0]
IER[11:0]
MUX
INTM
1 0
CPU
PIE级
外设级
INT1
(标志)
(使能)
IER |= M_INT1
EINT
来自外设或 外部中断源
组12
来自外设或 外部中断源
组1
TINT0
INT12.1
INT12.8
(标志)
PIEIFR12[INTx8:INTx1]
GPIO31.int
F28335外设中断分组:
2、中断处理及响应过程
a、产生请求:外设级的未屏蔽中断向PIE级传递
b、响应判断:PIE级进行分组,向CPU提出请求 可屏蔽中断:检查IER和INTM决定是否请求; 非屏蔽中断:立即请求。
c、中断服务(CPU级):
完成当前指令,清流水线; 自动保存现场 取中断向量送PC; 执行ISR。
(一)、F28335的中断系统
一、F28335中断系统结构 二、PIE外设中断扩展模块 三、非屏蔽中断
一、F28335中断系统结构
1、中断管理机制
外设级
各中断源使能
INT1
PIE级
INT12
支持96个,分12组
19优先级,组内有序
C28x
CPU
CPU级
INT1~INT12
INT14
INT13
IER |= 0x0008;
//enable INT4 in IER
IER &= 0xFFF7;
//disable INT4 in IER
CPU响应中断后,对应的中断允许位自动清0。
c、调试中断使能寄存器--DEBIER
D15
D14
RTOSINT DLOGINT
RW-0
RW-0
D13 INT14
RW-0
D12 INT13
RW-0
……
D0 INT1
RW-0
DEBIER用于实时仿真模式时的可屏蔽中断使能 和禁止,定义同IER。在ST1中设有DEBM屏蔽位。
用于在中断服务程序中设置断点或单步调试。
二、PIE外设中断扩展模块
1、PIE模块的结构
CPU级
RTOSINT DLOGINT INT14 INT13 INT12
中断向量表描述为:
struct PIE_VECT_TABLE {
PINT PIE1_RESERVED;
…………………;
PINT LUF;
// Latched underflow
}
中断向量表的存储器定位
向量名称
Not used INT1
…… INT12
INT13 INT14 Datalog
…… USER12