DSP中断的C编程步骤
一: 设 置 PIE 向 量 表 | 1,构造指向中断函数的数据类型PINT: typedef interrupt void(*PINT)(void); | |
2,按照DSP的中断向量表顺序构造中断向表数据结构: struct PIE_VECT_TABLE{…}; 其中的每一个元素均为PINT数据类型。 | ||
3,初始化中断向量表: 构造 PIE_VECT_TABLE型结构变量PieVectTable; 对每一个元素赋值,即指向特定的中断服务程序; | ||
4,声明和编写各特定的中断服务程序,如: interrupt void PIE_RESERVED(void) // Reserved space. For test. { asm (" ESTOP0"); for(;;); } | ||
二: 设 置 PIE 控 制 寄 存 器 | 1,以cregister声明CPU相关寄存器: extern cregister volatile unsigned int IFR; extern cregister volatile unsigned int IER; | |
2,初始化各控制寄存器: CPU寄存器: IER=0x0000;//禁止所有CPU中断; IFR=0x0000;//清空CPU中断标志寄存器; DINT asm(" setc INTM");//禁止所有可屏蔽中断 PIECTRL.ENPIE=0;//禁止所有PIE中断; PIEIERx =0x0000;//禁止各PIE中断; PIEIFRx =0x0000;//清楚各PIE中断标志;(不需要) PIEACK=0xffff;//清除所有PIE组向CPU申请的中断标志位 | ||
c编程步骤 3,设置开启中断: 在相关外设控制寄存器中使能对应中断,如: SCIRegsA.SCICTRL2 |=0x03;//使能SCI_A的发送和接收中断; PIEIERx |=PINTx;//使能对应的PIE中断; PIECTRL.ENPIE=1;// 使能所有PIE中断; PieVectTable.SCI_RxInt=& SCI_RxInt_ISR;//设置中断向量表中对应中断的中断服务程序入口地址,或采用原有中断向量表初始化值; EINT asm(" clrc INTM");//使能所有可屏蔽中断 IER |=MINTx;//使能对应的CPU中断; | ||
三: 编 写 中 断 服 务 函 数 | 1,CPU识别相应中断后自动完成下面的工作: 保护中断现场; 清除对应的IFR位;IFRx=0; 清除对应的IER位;IERx=0; 置位INTM=1,屏蔽所有可屏蔽中断; 清除EALLOW位,即关闭EALLOW保护, EALLOW=0; | |
2,获取中断向量(中断服务程序入口地址) CPU根据当前PIERx和PIFRx的值自动获取中断向量的地址,并清除对应的PIFRx.y, 表明该中断已经被识别和处理,CPU跳转至对应的中断服务程序; | ||
3执行中断服务程序 向对应的PIEACKx位写1,从而使能PIEIFRx分组中的其他中断; 执行相应中断处理代码; 从新置位对应IERx=1位,从而从新使能对应的CPU中断; 从新清除INTM=0位,从新使能CPU对可屏蔽中断的响应; | ||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论