关于dsp2812 编程的一点点一问
各位高手,情况是这样的。dsp由于上电复位之后,状态寄存器基本清零,我不知道IER和IFR会不会清零呢?另外写程序的时候voidmain(void){InitSysCtr...
各位高手,情况是这样的。dsp由于上电复位之后,状态寄存器基本清零,我不知道IER和IFR会不会清零呢?
另外写程序的时候
void main (void)
{
InitSysCtrl();
DIINT;
IER=0x0000;
IFR=0x0000;
............
}
程序固化在dsp芯片中,一上电,系统开始初始化,在程序初始化的过程中会不会意外出现中断,致使系统初始化中断不能进行下去。(当然 InitSysCtrl()函数中并不包含DINT这个命令)如果这种情况出现了怎么办呢?是不是应该把DINT写到 InitSysCtrl()函数去? 第二系统执行完 InitSysCtrl()命令以后,接着是关中断。这时IER, IFR寄存器中的值是什么,和上一次dsp的工作状态有关?还是已经复位了?若是复位了清零,下面的命令是不是就是多余的了?那既然这么写,应该中断的这寄存器并没有清零。既然关了总的中断,还有必要将使能和允许都置零么?这又是出于什么样的一种编程思想呢?
小弟刚刚接触 希望大虾指点一二 不胜感激
还有啊 我做CpuTimer0定时器中断时,要初始化预定标计数器,我看程序是这么写的
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TPRH.all=0;
这两条指令怎么解释呢?
分数没有问题 ,哪位大侠说明白了 多加分没有问题 。 展开
另外写程序的时候
void main (void)
{
InitSysCtrl();
DIINT;
IER=0x0000;
IFR=0x0000;
............
}
程序固化在dsp芯片中,一上电,系统开始初始化,在程序初始化的过程中会不会意外出现中断,致使系统初始化中断不能进行下去。(当然 InitSysCtrl()函数中并不包含DINT这个命令)如果这种情况出现了怎么办呢?是不是应该把DINT写到 InitSysCtrl()函数去? 第二系统执行完 InitSysCtrl()命令以后,接着是关中断。这时IER, IFR寄存器中的值是什么,和上一次dsp的工作状态有关?还是已经复位了?若是复位了清零,下面的命令是不是就是多余的了?那既然这么写,应该中断的这寄存器并没有清零。既然关了总的中断,还有必要将使能和允许都置零么?这又是出于什么样的一种编程思想呢?
小弟刚刚接触 希望大虾指点一二 不胜感激
还有啊 我做CpuTimer0定时器中断时,要初始化预定标计数器,我看程序是这么写的
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TPRH.all=0;
这两条指令怎么解释呢?
分数没有问题 ,哪位大侠说明白了 多加分没有问题 。 展开
1个回答
展开全部
dsp由于上电复位之后,IER和IFR清零
DINT写那里都一样的。
定时器预定标计数器TPR的设置
此计数器为32位。其低16位为PSC:TDDR,高16位为PSCH:TDDRH。
由PSCH:PSC组成定时器预定标计数器,保持定时器的当前预定值。PSCH:PSC减到0后则为一个定时器时钟周期。
由TDDRH:TDDR组成定时器分频值。即每过(TDDRH:TDDR+1)个定时器时钟源周期(SYSCLKOUT),定时器计数器寄存器(TIMH:TIM)就减1。
而(TIMH:TIM)的初始值由定时器周期寄存器PRD的值装入。
由此可知,定时器中断周期的实际值为:
Ttimer = SYSCLKOUT * ( TDDRH:TDDR+1 ) * ( PRDH:PRD )
此时的SYSCLKOUT为时间值
即
Ftimer = SYSCLKOUT / (TDDRH:TDDR+1 ) / (PRDH:PRD )
此时的SYSCLKOUT为频率值
例如,本程序中,SYSCLKOUT = 1 / ( 60*10^6 ),且定时器初始化时设置如下:
CpuTimer2Regs.PRD.all = 0x0000258;
CpuTimer2Regs.TPR.all = 0;
CpuTimer2Regs.TPRH.all = 0;
则TDDRH:TDDR = 0,而PRDH:PRD = 0x258 = 600,
所以此时Ftimer = ( 60*10^6 ) / 1 / 600 = 100000 = 100 K
DINT写那里都一样的。
定时器预定标计数器TPR的设置
此计数器为32位。其低16位为PSC:TDDR,高16位为PSCH:TDDRH。
由PSCH:PSC组成定时器预定标计数器,保持定时器的当前预定值。PSCH:PSC减到0后则为一个定时器时钟周期。
由TDDRH:TDDR组成定时器分频值。即每过(TDDRH:TDDR+1)个定时器时钟源周期(SYSCLKOUT),定时器计数器寄存器(TIMH:TIM)就减1。
而(TIMH:TIM)的初始值由定时器周期寄存器PRD的值装入。
由此可知,定时器中断周期的实际值为:
Ttimer = SYSCLKOUT * ( TDDRH:TDDR+1 ) * ( PRDH:PRD )
此时的SYSCLKOUT为时间值
即
Ftimer = SYSCLKOUT / (TDDRH:TDDR+1 ) / (PRDH:PRD )
此时的SYSCLKOUT为频率值
例如,本程序中,SYSCLKOUT = 1 / ( 60*10^6 ),且定时器初始化时设置如下:
CpuTimer2Regs.PRD.all = 0x0000258;
CpuTimer2Regs.TPR.all = 0;
CpuTimer2Regs.TPRH.all = 0;
则TDDRH:TDDR = 0,而PRDH:PRD = 0x258 = 600,
所以此时Ftimer = ( 60*10^6 ) / 1 / 600 = 100000 = 100 K
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询