第6章-F28335-系统控制与中断
F28335的时钟电路及系统控制的学习

F28335的时钟电路及系统控制的学习时钟源与锁相环电路 F28335的时钟源有两个,外部时钟和内部时钟。
时钟信号是由时钟源产⽣,⽽时钟源⼜称振荡器。
F28335的外部时钟源信号接⼊有两个⽅法,分别对应两种不同电压的情况,3.3v和1.9v。
当电压为3.3v时,外部信号接XCLKIN引脚,X1引脚接地,X2引脚不接。
当电压为1.9v时,外部信号接X1引脚,XCLKIN引脚接地,X2引脚不接。
⽽内部时钟源的接法是常规接法,将XCLKIN引脚置地,X1,X2引脚之间直接接⼊晶振(通过晶振连起来)。
⼀般来说,X1与X2之间接⼊的晶振为30MHz. EMI:Electromagnetic Interference 电磁⼲扰 GPIO:General Purpose Input Output 通⽤输⼊输出 OSCCLK:振荡器时钟信号 锁相环:分频和变频。
通常⽤来信号调制、在频率合成电路中,产⽣特定频率的信号、数据采集电路中⽤来进⾏信号的同步。
锁相环路是⼀种反馈电路,Phase -Locked Loop 简称PLL。
F28335的最⾼频率为150Mhz,这个如何计算得呢? ⾸先30MHz的OSCCLK信号经锁相环倍频后,倍频倍数通过寄存器PLLCR进⾏设置,设置为10,此时VCOCLK时钟信号为300MHz,⽽F28335的最⾼频率为150MHz,所以给CPU核的时候,还要进⾏⼀次⼆分频,最后产⽣了F28335的150MHz的时钟信号。
看门狗电路 在嵌⼊式系统中,为了使系统在异常情况下能⾃动复位,⼀般都需要引⼊看门狗,看门狗(Watchdog timer)本质上是⼀个在⼀定时间内被复位的计数器即定时器电路,⼀般有⼀个输⼊和⼀个输出。
输出⼀般连接到复位端。
输⼊被称为“喂狗”。
CPU运⾏⼀段时间,狗会饥饿,需要喂狗,即每隔⼀段时间输出⼀个信号到喂狗端,实际操作就是给看门狗的计数器清零。
如果系统没有问题,程序肯定是按时喂狗,如果没有按时喂狗,狗就会饥饿,此时⼀般认为程序是出了什么意外,然后系统会“被狗咬”。
单片机开发 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;
28335中断的一般方法

中断的一般方法步骤1void InitPieCtrl(void) //初化PIE控制寄存器{DINT; //关闭所有CPU标准中断Disable Interrupts at the CPU level:PieCtrlRegs.PIECTRL.bit.ENPIE = 0; // 关闭所有PIE中断Disable the PIE// Clear all PIEIER registers: 清除所有中断使能位PieCtrlRegs.PIEIER1~12(省了中问部分).all = 0;// Clear all PIEIFR registers: 清除所有中断标志位PieCtrlRegs.PIEIFR1~12.all = 0;}步骤2// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;步骤3 初始化中断向量表void InitPieV ectT able(void){ int16 i;Uint32 *Source = (void *) &PieV ectT ableInit;Uint32 *Dest = (void *) &PieVectT able;EALLOW;for(i=0; i < 128; i++)*Dest++ = *Source++;EDIS;// Enable the PIE Vector T ablePieCtrlRegs.PIECTRL.bit.ENPIE = 1;}//下面这个原中断数据地向量位置const struct PIE_VECT_TABLE PieV ectT ableInit = {PIE_RESERVED, // 0 Reserved spacePIE_RESERVED, // 1 Reserved spacePIE_RESERVED, // 2 Reserved spacePIE_RESERVED, // 3 Reserved spacePIE_RESERVED, // 4 Reserved spacePIE_RESERVED, // 5 Reserved spacePIE_RESERVED, // 6 Reserved spacePIE_RESERVED, // 7 Reserved spacePIE_RESERVED, // 8 Reserved spacePIE_RESERVED, // 9 Reserved spacePIE_RESERVED, // 10 Reserved spacePIE_RESERVED, // 11 Reserved spacePIE_RESERVED, // 12 Reserved space// Non-Peripheral InterruptsINT13_ISR, // XINT13 or CPU-Timer 1INT14_ISR, // CPU-Timer2DATALOG_ISR, // Datalogging interruptRTOSINT_ISR, // RTOS interruptEMUINT_ISR, // Emulation interruptNMI_ISR, // Non-maskable interruptILLEGAL_ISR, // Illegal operation TRAPUSER1_ISR, // User Defined trap 1USER2_ISR, // User Defined trap 2USER3_ISR, // User Defined trap 3USER4_ISR, // User Defined trap 4USER5_ISR, // User Defined trap 5USER6_ISR, // User Defined trap 6USER7_ISR, // User Defined trap 7USER8_ISR, // User Defined trap 8USER9_ISR, // User Defined trap 9USER10_ISR, // User Defined trap 10USER11_ISR, // User Defined trap 11USER12_ISR, // User Defined trap 12// Group 1 PIE V ectorsSEQ1INT_ISR, // 1.1 ADCSEQ2INT_ISR, // 1.2 ADCrsvd_ISR, // 1.3XINT1_ISR, // 1.4XINT2_ISR, // 1.5ADCINT_ISR, // 1.6 ADCTINT0_ISR, // 1.7 Timer 0WAKEINT_ISR, // 1.8 WD, Low Power// Group 2 PIE V ectorsEPWM1_TZINT_ISR, // 2.1 EPWM-1 Trip ZoneEPWM2_TZINT_ISR, // 2.2 EPWM-2 Trip ZoneEPWM3_TZINT_ISR, // 2.3 EPWM-3 Trip ZoneEPWM4_TZINT_ISR, // 2.4 EPWM-4 Trip ZoneEPWM5_TZINT_ISR, // 2.5 EPWM-5 Trip ZoneEPWM6_TZINT_ISR, // 2.6 EPWM-6 Trip Zonersvd_ISR, // 2.7rsvd_ISR, // 2.8// Group 3 PIE V ectorsEPWM1_INT_ISR, // 3.1 EPWM-1 InterruptEPWM2_INT_ISR, // 3.2 EPWM-2 InterruptEPWM3_INT_ISR, // 3.3 EPWM-3 InterruptEPWM4_INT_ISR, // 3.4 EPWM-4 InterruptEPWM5_INT_ISR, // 3.5 EPWM-5 InterruptEPWM6_INT_ISR, // 3.6 EPWM-6 Interruptrsvd_ISR, // 3.7rsvd_ISR, // 3.8// Group 4 PIE V ectorsECAP1_INT_ISR, // 4.1 ECAP-1ECAP2_INT_ISR, // 4.2 ECAP-2ECAP3_INT_ISR, // 4.3 ECAP-3ECAP4_INT_ISR, // 4.4 ECAP-4ECAP5_INT_ISR, // 4.5 ECAP-5ECAP6_INT_ISR, // 4.6 ECAP-6rsvd_ISR, // 4.7rsvd_ISR, // 4.8// Group 5 PIE V ectorsEQEP1_INT_ISR, // 5.1 EQEP-1EQEP2_INT_ISR, // 5.2 EQEP-2rsvd_ISR, // 5.3rsvd_ISR, // 5.4rsvd_ISR, // 5.5rsvd_ISR, // 5.6rsvd_ISR, // 5.7rsvd_ISR, // 5.8// Group 6 PIE V ectorsSPIRXINTA_ISR, // 6.1 SPI-ASPITXINT A_ISR, // 6.2 SPI-AMRINTA_ISR, // 6.3 McBSP-AMXINTA_ISR, // 6.4 McBSP-AMRINTB_ISR, // 6.5 McBSP-BMXINTB_ISR, // 6.6 McBSP-Brsvd_ISR, // 6.7rsvd_ISR, // 6.8// Group 7 PIE V ectorsDINTCH1_ISR, // 7.1 DMA channel 1DINTCH2_ISR, // 7.2 DMA channel 2DINTCH3_ISR, // 7.3 DMA channel 3DINTCH4_ISR, // 7.4 DMA channel 4DINTCH5_ISR, // 7.5 DMA channel 5DINTCH6_ISR, // 7.6 DMA channel 6rsvd_ISR, // 7.7rsvd_ISR, // 7.8// Group 8 PIE V ectorsI2CINT1A_ISR, // 8.1 I2CI2CINT2A_ISR, // 8.2 I2Crsvd_ISR, // 8.3rsvd_ISR, // 8.4SCIRXINTC_ISR, // 8.5 SCI-CSCITXINTC_ISR, // 8.6 SCI-Crsvd_ISR, // 8.7rsvd_ISR, // 8.8// Group 9 PIE V ectorsSCIRXINTA_ISR, // 9.1 SCI-ASCITXINTA_ISR, // 9.2 SCI-ASCIRXINTB_ISR, // 9.3 SCI-BSCITXINTB_ISR, // 9.4 SCI-BECAN0INTA_ISR, // 9.5 eCAN-AECAN1INTA_ISR, // 9.6 eCAN-AECAN0INTB_ISR, // 9.7 eCAN-BECAN1INTB_ISR, // 9.8 eCAN-B// Group 10 PIE V ectorsrsvd_ISR, // 10.1rsvd_ISR, // 10.2rsvd_ISR, // 10.3rsvd_ISR, // 10.4rsvd_ISR, // 10.5rsvd_ISR, // 10.6rsvd_ISR, // 10.7rsvd_ISR, // 10.8// Group 11 PIE V ectorsrsvd_ISR, // 11.1rsvd_ISR, // 11.2rsvd_ISR, // 11.3rsvd_ISR, // 11.4rsvd_ISR, // 11.5rsvd_ISR, // 11.6rsvd_ISR, // 11.7rsvd_ISR, // 11.8// Group 12 PIE V ectorsXINT3_ISR, // 12.1XINT4_ISR, // 12.2XINT5_ISR, // 12.3XINT6_ISR, // 12.4XINT7_ISR, // 12.5rsvd_ISR, // 12.6LVF_ISR, // 12.7LUF_ISR, // 12.8};这是中断目的向量表struct PIE_VECT_TABLE {// Reset is never fetched from this table.// It will alway s be fetched from 0x3FFFC0 in// boot ROMPINT PIE1_RESERVED;PINT PIE2_RESERVED;PINT PIE3_RESERVED;PINT PIE4_RESERVED;PINT PIE5_RESERVED;PINT PIE6_RESERVED;PINT PIE7_RESERVED;PINT PIE8_RESERVED;PINT PIE9_RESERVED;PINT PIE10_RESERVED;PINT PIE11_RESERVED;PINT PIE12_RESERVED;PINT PIE13_RESERVED;// Non-Peripheral Interrupts:PINT XINT13; // XINT13 / CPU-Timer1PINT TINT2; // CPU-Timer2PINT DATALOG; // Datalogging interruptPINT RTOSINT; // RTOS interruptPINT EMUINT; // Emulation interruptPINT XNMI; // Non-maskable interruptPINT ILLEGAL; // Illegal operation TRAPPINT USER1; // User Defined trap 1PINT USER2; // User Defined trap 2PINT USER3; // User Defined trap 3PINT USER4; // User Defined trap 4PINT USER5; // User Defined trap 5PINT USER6; // User Defined trap 6PINT USER7; // User Defined trap 7PINT USER8; // User Defined trap 8PINT USER9; // User Defined trap 9PINT USER10; // User Defined trap 10PINT USER11; // User Defined trap 11PINT USER12; // User Defined trap 12// Group 1 PIE Peripheral Vectors:PINT SEQ1INT;PINT SEQ2INT;PINT rsvd1_3;PINT XINT1;PINT XINT2;PINT ADCINT; // ADCPINT TINT0; // Timer 0PINT WAKEINT; // WD// Group 2 PIE Peripheral Vectors:PINT EPWM1_TZINT; // EPWM-1PINT EPWM2_TZINT; // EPWM-2PINT EPWM3_TZINT; // EPWM-3PINT EPWM4_TZINT; // EPWM-4PINT EPWM5_TZINT; // EPWM-5PINT EPWM6_TZINT; // EPWM-6PINT rsvd2_7;PINT rsvd2_8;// Group 3 PIE Peripheral Vectors:PINT EPWM1_INT; // EPWM-1PINT EPWM2_INT; // EPWM-2PINT EPWM3_INT; // EPWM-3PINT EPWM4_INT; // EPWM-4PINT EPWM5_INT; // EPWM-5PINT EPWM6_INT; // EPWM-6PINT rsvd3_7;PINT rsvd3_8;// Group 4 PIE Peripheral Vectors:PINT ECAP1_INT; // ECAP-1PINT ECAP2_INT; // ECAP-2PINT ECAP3_INT; // ECAP-3PINT ECAP4_INT; // ECAP-4PINT ECAP5_INT; // ECAP-5PINT ECAP6_INT; // ECAP-6PINT rsvd4_7;PINT rsvd4_8;// Group 5 PIE Peripheral Vectors:PINT EQEP1_INT; // EQEP-1PINT EQEP2_INT; // EQEP-2PINT rsvd5_3;PINT rsvd5_4;PINT rsvd5_5;PINT rsvd5_6;PINT rsvd5_7;PINT rsvd5_8;// Group 6 PIE Peripheral Vectors:PINT SPIRXINTA; // SPI-APINT SPITXINTA; // SPI-APINT MRINTB; // McBSP-BPINT MXINTB; // McBSP-BPINT MRINTA; // McBSP-APINT MXINTA; // McBSP-APINT rsvd6_7;PINT rs vd6_8;// Group 7 PIE Peripheral Vectors:PINT DINTCH1; // DMAPINT DINTCH2; // DMAPINT DINTCH3; // DMAPINT DINTCH4; // DMAPINT DINTCH5; // DMAPINT DINTCH6; // DMAPINT rsvd7_7;PINT rsvd7_8;// Group 8 PIE Peripheral Vectors:PINT I2CINT1A; // I2C-APINT I2CINT2A; // I2C-APINT rsvd8_3;PINT rsvd8_4;PINT SCIRXINTC; // SCI-CPINT SCITXINTC; // SCI-CPINT rsvd8_7;PINT rsvd8_8;// Group 9 PIE Peripheral Vectors:PINT SCIRXINTA; // SCI-APINT SCITXINTA; // SCI-APINT SCIRXINTB; // SCI-BPINT SCITXINTB; // SCI-BPINT ECAN0INTA; // eCAN-APINT ECAN1INTA; // eCAN-APINT ECAN0INTB; // eCAN-BPINT ECAN1INTB; // eCAN-B // Group 10 PIE Peripheral V ectors:PINT rsvd10_1;PINT rsvd10_2;PINT rsvd10_3;PINT rsvd10_4;PINT rsvd10_5;PINT rsvd10_6;PINT rsvd10_7;PINT rsvd10_8;// Group 11 PIE Peripheral V ectors:PINT rsvd11_1;PINT rsvd11_2;PINT rsvd11_3;PINT rs vd11_4;PINT rsvd11_5;PINT rsvd11_6;PINT rsvd11_7;PINT rsvd11_8;// Group 12 PIE Peripheral V ectors:PINT XINT3; // External interruptPINT XINT4;PINT XINT5;PINT XINT6;PINT XINT7;PINT rsvd12_6;PINT LVF; // Latched overflowPINT LUF; // Latched underflow};//---------------------------------------------------------------------------// PIE Interrupt V ector T able External References & Function Declarations://extern struct PIE_VECT_TABLE PieV ectT able;实例说明void main(void){Uint16 i;InitSysCtrl(); //初始化系统DINT;InitPieCtrl(); //初始化PIEIER = 0x0000;IFR = 0x0000;InitPieV ectT able();//实始化中断向量表EALLOW;PieV ectT able.DINTCH1= &local_DINTCH1_ISR; //这个对就是INT7.Y 的第一个位DMA EDIS;IER = M_INT7 ; //M_INT7=0x0040=0100,0000//打开INT7.Y这个很重要EnableInterrupts();}void EnableInterrupts(){// Enable the PIEPieCtrlRegs.PIECTRL.bit.ENPIE = 1;// Enables PIE to drive a pulse into the CPUPieCtrlRegs.PIEACK.all = 0xFFFF;// Enable Interrupts at the CPU levelEINT;}// INT7.1interrupt void local_DINTCH1_ISR(void) // DMA Channel 1{// T o receive more interrupts from this PIE group, acknowledge this interrupt PieCtrlRegs.PIEACK.all |= PIEACK_GROUP7;// Next two lines for debug only to halt the processor here// Remove after inserting ISR Codeasm (" ESTOP0");for(;;);}SCI串口的一般用法步骤1 初始化IO口为串口void InitSciaGpio(){EALLOW;GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0; //SCIRXDAGpioCtrlRegs.GPBPUD.bit.GPIO35 = 0; //SCITXDAGpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; //SCIRXDAGpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1;EDIS;}步骤 2 我在这里设置为中断方式及初始化程序EALLOW;PieV ectT able.SCIRXINTA = &sciaRxFifoIsra;PieV ectT able.SCITXINTA = &sciaTxFifoIsra;EDIS;scia_fifo_init(); // Init SCI-A用FIFO模式PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block 使能总中断模块PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, int1 使能接收中断使能位//PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE Group 9, INT2 使能发送中断使能位IER |= 0x100; // Enable CPU INT 打开Group 9所有可以使能中到CPUEINT;初始化FIFOvoid scia_fifo_init(){SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback// No parity,8 char bits,// asy nc mode同步模式, idle-line protocol 空闲线协议SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.bit.TXINTENA =1; //使能发送中断SciaRegs.SCICTL2.bit.RXBKINTENA =1;//使能接收中断SciaRegs.SCIHBAUD = 0x0001;SciaRegs.SCILBAUD = 0x00E7;// 9600 baud @LSPCLK = 37.5MHzSciaRegs.SCICCR.bit.LOOPBKENA =0; // 1 Enable loop back 0关闭自己测模式SciaRegs.SCIFFTX.all=0xC028; //FIFO小于或等于8个字节时发送中断产生SciaRegs.SCIFFRX.all=0x002F; //FIFO大于或等于16个字节时接收中断产生(注意: 不大于时不会产生中断)// SciaRegs.SCIFFCT.all=0x00;SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset 软件复位后使能中断SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1; //发送FIFO复位SciaRegs.SCIFFRX.bit.RXFIFORESET=1; //接收FIFO复位}步骤3 编写中断处理程序interrupt void sciaTxFifoIsra(void){ //中断处理内容SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK}//-------SCI接收中断--------interrupt void sciaRxFifoIsra(void){ Uint16 i;for(i=0;i<16;i++){rdataB[i]=SciaRegs.SCIRXBUF.all; // Read data//rdataB[i]=rdataA[i];}SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flagSciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flagPieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack}。
第六章 TMS320F28335片内外设_CAN,SPI资料讲解

现场总线CAN通信编程及应用.
教学内容:
第一节:TMS320F28335系列SPI通信接口 第二节: TMS320F28335系列CAN总线通信接口
DSP原理与应用
2020年7月15日
2
§6.1.1 TMS320F2833x系列SPI通信
SPI模块的主要特点: 四个外部引脚
SPISOMI: SPI slave-output/master-input pin SPISIMO: SPI slave-input/master-output pin SPISTE: SPI slave transmit-enable pin SPICLK: SPI serial-clock pin 两个可编程模式: 主(master)和从(slave) 125种可编程 波特率设置. 数据长度1至16位. 四种时钟模式 接收和发送可同时操作(发送功能可以软件禁止) 12个SPI模块控制寄存器 增强特性 16级发送/接收FIFO; 延时传输控制.
SPIDAT (SPI data register). Contains data to be transmitted by the SPI, acting as the transmit/receive shift register. Data written to SPIDAT is shifted out on subsequent SPICLK cycles. For every bit shifted out of the SPI, a bit from the receive bit stream is shifted into the other end of the shift register
DSP原理与应用
第6章-F28335-系统控制与中断

6.4 32位CPU定时器0/1/2
6、TIMERxTPR寄存器
6.5 TMS320F28335外设中断扩 展
6.5.1 PIE控制器概述
F28335 CPU支持一个不可屏蔽中断(NMI)和16个具有优先级的可屏蔽 中断(INT1-INT14,RTOSINT和DLOGINT)PIE可支持96个独立中断,并 分为8组(12个中断线/组,INT1-INT12),CPU可自动获取96个中断 向量,中断优先级可通过硬件或软件控制,每个中断可使能或禁止,PIE 向量表存放ISR
④在执行完中断服务程序之后,PIEIFR位将被清除; ⑤修改PIE向量表,重新映射外设服务程序到正确的中断服务程序; ⑥清除EALLOW位。
(2)软件设置中断优先级:采用CPU的IER寄存器作为全局 优先级;各自的PIEIFR寄存器用于每组的优先级控制。
(3)使用PIEIER禁止中断
6.5 TMS320F28335外设中断扩 展
2、使能/禁止复用外设中断 方法1:通过清除PIEIERx的相关位禁止中断,但保留PIEIFRx的相关位
方法2:通过PIEIERx的相关位禁止中断,并清除对应的PIEIFRx相关位
看门狗组成:1、定时器(计数器)WD Counter。 2、看门狗重启管理器(WD Reset Register)。 3、看门狗时钟发生器。 4、看门狗状态位。
6.3.1 看门狗模块
6.3 看门狗
6.3.2 看门狗定时器
6.3 看门狗
6.3.3 看门狗寄存器
1、系统控制和状态寄存器(SCSR)
1、中断结构
(1)外设级中断;(2)PIE级中断;(3)CPU级中断
6.5 TMS320F28335外设中断扩 展
6.5.1 PIE控制器概述
单片机开发 F28335时钟及控制系统

(B)外部时钟信号接入方式2,即采用1.9V的外部时钟。
②内部时钟源信号接法
2.F28335系统控制及外设时钟
3.时钟单元常用寄存器
1.1 外设时钟控制寄存器PCLCCR0/1/3 (1)外设时钟控制寄存器PCLKCR0各位定义
(2)外设时钟控制寄存器PCLKCR1各位定义
(3)外设时钟控制寄存器PCLKCR3各位定义
4.自定义系统时钟
F28335时Βιβλιοθήκη 及控制系统本讲主要内容1.F28335系统时钟来源 2.F28335系统控制及外设时钟 3.时钟单元常用寄存器 4.自定义系统时钟
1.F28335系统时钟来源
①外部时钟源信号接入方法有2种,分别针对的是电压为3.3V的 外部时钟和1.9V的外部时钟。 (A)外部时钟信号接入方式1,即采用3.3V的外部时钟。
基于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原理与应用2011-第六章 TMS320F28335片内外设_CAN,SPI
DSP原理与应用The Technology & Applications of DSPs 第六讲TMS320F28335片内外设---CAN,SPI北京交通大学电气工程学院夏明超郝瑞祥万庆祝mchxia@haorx@qzhwan@TMS320F28335---CAN,SPI 第六讲片内外设,教学目标:掌握TMS320F28335芯片现场总线CAN通信接口,SPI串行外设接口通信相关知识;教学重点:掌握TMS320F28335芯片常用串行通信接口的特点和应用.教学难点:现场总线CAN通信编程及应用.教学内容:第一节:TMS320F28335系列SPI通信接口第二节: TMS320F28335系列CAN总线通信接口6.1.1 TMS320F2833x SPI§6S30833系列S通信SPI模块的主要特点:◆四个外部引脚SPISOMI: SPI slave-output/master-input pinSPISIMO: SPI slave-input/master-output pinSPISTE: SPI slave transmit-enable pinSPISTE:SPI slave transmit enable pinSPICLK: SPI serial-clock pin◆两个可编程模式: 主(master)和从(slave)◆125种可编程波特率设置.◆数据长度1至16位.◆四种时钟模式◆接收和发送可同时操作◆12个SPI模块控制寄存器◆增强特性16级发送/接收FIFO;延时传输控制.SPI 模块C PU 接口SPI 模块内部结构框图§6.1.2 典型SPI主/从通信连接模式一) (MASTER)()主模式()在该模式下(MASTER/SLAVE = 1), SPI模块通过SPICLK引脚提供整个串行通信网络的时钟. 数据通过SPISOMI引脚接收. SPIBRR寄存器决定网络上发送和接收的波特率。
TMS320F28335笔记-外部中断
TMS320F28335笔记-外部中断外部中断外部中断寄存器:除此之外,如果我们⽤到某⼀个外部中断,还要设置该外部中断相应的寄存器。
这⾥,需要注意的是外部中断的标志要⾃⼰通过软件来清零。
⽽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使能PIEPieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第⼀组中的中断5IER |= M_INT1; // Enable CPU 第⼀组中断EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM也就是说,12组中的每个中断都要完成上⾯的相同配置,剩下的才是去配置⾃⼰的中断。
如我们提到的EXINT,即外⾯来个低电平我们就进⼊中断,完成我们的程序。
在这⾥要介绍⼀下,DSP的GPIO⼝都可以配置为外部中断⼝,其配置⽅法如下:GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 0; //选择他们是GPIO⼝GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 0;GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0;GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 0;GpioCtrlRegs.GPBDIR.bit.GPIO54 = 0; //选择他们都是输⼊⼝GpioCtrlRegs.GPBDIR.bit.GPIO55 = 0;GpioCtrlRegs.GPBDIR.bit.GPIO56 = 0;GpioCtrlRegs.GPBDIR.bit.GPIO57 = 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO54= 0; //GPIO时钟和系统时钟⼀样且⽀持GPIOGpioCtrlRegs.GPBQSEL2.bit.GPIO55= 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO56= 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO57= 0;GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 54; //中断3选择GPIOGpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL = 55;GpioIntRegs.GPIOXINT5SEL.bit.GPIOSEL = 56;GpioIntRegs.GPIOXINT6SEL.bit.GPIOSEL = 57;XIntruptRegs.XINT3CR.bit.POLARITY= 0; //触发模式为下降沿触发XIntruptRegs.XINT4CR.bit.POLARITY= 0;XIntruptRegs.XINT5CR.bit.POLARITY= 0;XIntruptRegs.XINT6CR.bit.POLARITY= 0;XIntruptRegs.XINT3CR.bit.ENABLE = 1; //使能中断XIntruptRegs.XINT4CR.bit.ENABLE = 1;XIntruptRegs.XINT5CR.bit.ENABLE = 1;XIntruptRegs.XINT6CR.bit.ENABLE = 1;注意⼀点就是外部中断1和2只能对GPIO0—GPIO31配置;外部中断3和4、5、6、7只对GPIO32—GPIO63配置。
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中断的设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6.3.1 看门狗模块
6.3 看门狗
6.3.2 看门狗定时器
6.3 看门狗
6.3.3 看门狗寄存器
1、系统控制和状态寄存器(SCSR)
1、VMAP:状态寄存器1(ST1)第3位,器件复位后该为置1,可向该位写 值或用SETC/CLRC VMAP指令修改其值。正常操作下保留此位为1。
2、M0M1MAP:ST1第11位,复位后置1,可向该位写值或用SETC/CLRC M0M1MAP指令修改其值
3、ENPIE:PIECTRL寄存器第0位,复位为0(PIE禁止),写PIECTRL修 改其值
第六章 TMS320F28335系统时钟与 中断
6.1 时钟与系统控制
6.1.1 时钟
6.3 时钟与系统控制
6.1.1 时钟
6.1 时钟与系统控制
6.1.1 时钟
6.1 时钟与系统控制
6.1.1 时钟
6.1 时钟与系统控制
6.1.1 时钟
6.1 时钟与系统控制
6.1.1 时钟
6.1 时钟与系统控制
6.5 TMS320F28335外设中断扩 6展.5.2 向量表映射
6.5 TMS320F28335外设中断扩 展
6.5.3 中断源
6.5 TMS320F28335外设中断扩 展
6.5.3 中断源
6.5 TMS320F28335外设中断扩 展
1、复用中断操作
12组PIE外设中断中,每组8个中断共用一个CPU中断(INT1INT12)每组都有PIEIER和PIEIFR。当两者清零时,应遵循:
定时器工作原理:32位的计数器(TIMH:TIM)从周期寄存 器(PRDH:PRD)中装载数据,每经过(TDDRH:TDDR+1) 个SYSCLKOUT周期,(TIMH:TIM)减1,当计数器等于0时 将产生一次中断请求信号。
6.4 32位CPU定时器0/1/2
1、CPU定时器中断信号和输出信号
6.4 32位CPU定时器0/1/2
6.5 TMS320F28335外设中断扩 展
6.5.4 PIE配置寄存器
6.5 TMS320F28335外设中断扩 展
6.5.4 PIE配置寄存器
6.5 TMS320F28335外设中断扩 展
6.5.4 PIE配置寄存器
6.5 TMS320F28335外设中断扩Βιβλιοθήκη 展6.5.4 PIE配置寄存器
• PLL配置模式
6.1 时钟与系统控制
6.1.3 PLL控制,状态寄存器
PLLCR修改流程:
6.1 时钟与系统控制
6.1.3 PLL控制,状态和XCLKOUT寄 存器
1、PLLCR寄存器
6.1 时钟与系统控制
2、PLL状态寄存器(PLLSTS)
6.1 时钟与系统控制
2、PLL状态寄存器 (PLLSTS)
6.1.1 时钟
6.1 时钟与系统控制
6.1.2 振荡器和PLL
为DSP提供时钟信号 为低功耗模式提供入口信号
6.1 时钟与系统控制
PLL时钟模块提供两种操作模式
1、晶体/谐振器模式:外部晶振提供时基,与X1、X2相连 2、外部时钟源模式(包含两个模式):当片内晶振未用时。
模式1:XCLKIN引脚上的外部时钟,3.3V 模式2:X1引脚上的外部时钟,1.8V
6.5 TMS320F28335外设中断扩 展
6.5.5 CPU中断寄存器
6.5 TMS320F28335外设中断扩 展
6.5.5 CPU中断寄存器
6.5 TMS320F28335外设中断扩 展
6.5.5 CPU中断寄存器
6.5 TMS320F28335外设中断扩 展
6.5.5 CPU中断寄存器
4、PIE中断向量表
6.5 TMS320F28335外设中断扩 展
4、PIE中断向量表
6.5 TMS320F28335外设中断扩 展
6.5.4 PIE配置寄存器
1、PIE控制寄存器 (PIECTRL)
2、PIE中断答应寄存器 (PIEACK)
3、PIE中断标志寄存器 (PIEIFRx)
4、PIE中断使能寄存器 (PIEIERx)
(1)不采用软件清除PIEIFR位:如需在未执行中断服务程序中 清除PIEIFR,需要遵循严格步骤。
①设置EALLOW位为1允许修改PIE向量表; ②修改PIE向量表,使外设服务程序指针向量指向一个临时的ISR,这个临
时的ISR只执行一个中断返回(IRET)操作; ③使能中断,使中断执行临时中断服务程序;
6.2 低功耗模式
1、低功耗模式
6.2 低功耗模式
1、低功耗模式
6.2 低功耗模式
2、低功耗模式控制寄存器0(LPMCR0)
6.3 看门狗
看门狗作用:用于监视系统的运行,当程序运行混乱时(如 进入死循环或程序跑飞)完成系统复位。
看门狗机理:主要核心是一个定时器,当定时器时间到时复 位正常运行程序过程中每次在看门狗的定时器时间到之前 重启看门狗定时器。
6.5 TMS320F28335外设中断扩 展
6.5.5 CPU中断寄存器
6.5 TMS320F28335外设中断扩 展
6.5.6 外部中断控制寄存器
F28335共支持7个外部中断XINT1-INT7,XINT13还有一个不可 屏蔽的外部中断XNMI共用中断源。每一个外部中断可以被选择为正边 沿或负边沿触发,也可以被使能或禁止(包括XNMI)。可屏蔽中断单 位包括一个16位增计数器,该计数器在检测到有效中断边沿时复位为0, 同事用来准确记录中断发生的时间。
2、CPU定时器0,1,2配置和控制寄存器
6.4 32位CPU定时器0/1/2
3、TIMERxTIM寄存器(X = 1,2,3)
6.4 32位CPU定时器0/1/2
4、TIMERxPRD寄存器(X = 1,2,3)
6.4 32位CPU定时器0/1/2
5、TIMERxTCR寄存器(X = 1,2,3)
6.4 32位CPU定时器0/1/2
6、TIMERxTPR寄存器
6.5 TMS320F28335外设中断扩 展
6.5.1 PIE控制器概述
F28335 CPU支持一个不可屏蔽中断(NMI)和16个具有优先级的可屏蔽 中断(INT1-INT14,RTOSINT和DLOGINT)PIE可支持96个独立中断,并 分为8组(12个中断线/组,INT1-INT12),CPU可自动获取96个中断 向量,中断优先级可通过硬件或软件控制,每个中断可使能或禁止,PIE 向量表存放ISR
1、中断结构
(1)外设级中断;(2)PIE级中断;(3)CPU级中断
6.5 TMS320F28335外设中断扩 展
6.5.1 PIE控制器概述
2、中断响应流程
6.5 TMS320F28335外设中断扩
展
6.5.2
向量表映射
F28335中,中断向量表可映射到4个不同的存储区域(如下表),实际使用 中,只使用PIE中断向量表映射。由下面三个信号控制
2、使能/禁止复用外设中断 方法1:通过清除PIEIERx的相关位禁止中断,但保留PIEIFRx的相关位
方法2:通过PIEIERx的相关位禁止中断,并清除对应的PIEIFRx相关位
6.5 TMS320F28335外设中断扩 展
3、外设中断复用请求流程
6.5 TMS320F28335外设中断扩 展
1、外部中断x控制寄存器(XINTnCR)
2、外部NMI中断控制寄存器(XNMICR)
3、外部中断x计数器(XINTxCTR) 4、外部NMI中断x计数器(XNMICTR),位定义与上相同
6.3 看门狗时钟
2、看门狗计数器寄存器(WDCNTR)
3、看门狗密钥寄存器(WDKEY)
6.3 看门狗
4、看门狗控制寄存器(WDCR) • WDFLAG:0-未发生复位,1-发生复位 • WDDIS: 0-禁止看门狗,1-使能看门狗 • WDCHK2-0: 101 系统正常运行
其他值 复位
6.4 32位CPU定时器0/1/2
④在执行完中断服务程序之后,PIEIFR位将被清除; ⑤修改PIE向量表,重新映射外设服务程序到正确的中断服务程序; ⑥清除EALLOW位。
(2)软件设置中断优先级:采用CPU的IER寄存器作为全局 优先级;各自的PIEIFR寄存器用于每组的优先级控制。
(3)使用PIEIER禁止中断
6.5 TMS320F28335外设中断扩 展