理论教育 如何配置寄存器以优化任务执行效率

如何配置寄存器以优化任务执行效率

时间:2023-06-15 理论教育 版权反馈
【摘要】:这将停止当前任务,清除MIRUN标志且清除MIER寄存器的所有位。将所有CLA寄存器设置为默认状态。存储器配置寄存器存储器配置寄存器用于将CLA程序和数据RAM映射到CPU或CLA存储器空间。配置MPISRCSEL1寄存器,可以设置哪一个可能的外设将启动任务。在相应任务正在执行时,将MIER寄存器设置为0对任务无影响。

如何配置寄存器以优化任务执行效率

(1)控制寄存器(Configuration Control Register,MCTL)

控制寄存器的格式如下。

位15~3,保留位。

位2,IACKE:IACK使能。

●0:CLA忽略IACK指令(默认)。

●1:使用IACK#16位指令设置MIFR位,使能主CPU与向MIFRC寄存器写入相同。16位操作数中的每一位对应于MIFRC寄存器的一位。使用IACK具有不用首先设置EALLOW位的优点。这样允许主CPU通过软件高效率触发一个CLA任务。

例如,IACK #0x0001 向MIFRC位0写1,将强制任务1。

IACK #0x0003 向MIFRC位0和1写1,将强制任务1和任务2。

位1,SOFTRESET:软件复位。

●0:该位总是读出时为0,写入0被忽略。

●1:写1引起CLA软件复位。这将停止当前任务,清除MIRUN标志且清除MIER寄存器的所有位。在软件复位后,必须在重新配置MIER位之前等待至少1个SYSCLK⁃OUT周期。如果紧接着进行这两种操作,那么MIER位不会被置位。

位0,HARDRESET:硬件复位。

●0:该位总是读出时为0,写入0被忽略。

●1:写1引起CLA硬件复位。将所有CLA寄存器设置为默认状态。

(2)存储器配置寄存器(Memory Configuration Register,MMEMCFG)

存储器配置寄存器(MMEMCFG)用于将CLA程序和数据RAM映射到CPU或CLA存储器空间。CLA程序和数据RAM的典型映射一般只出现在初始化过程中。如果后来需要将这些存储器重新映射回CPU空间然后禁止中断,应通过检查MIRUN寄存器保证所有任务已完成。在更改存储器的映射配置与访问它们之间,留出两个SYSCLKOUT时钟周期。

存储器配置寄存器的格式如下。

位15~6、位3~1,保留位。

位5,RAM1E:CLA数据RAM1使能。在更改该位与访问存储器之间,要留出两个SY-SCLKOUT周期。

0:CLA数据SARAM块1被映射到主CPU程序与数据空间。CLA读返回0(默认)。

1:CLA数据SARAM块1被映射到CLA数据空间。主CPU只能通过调试访问该块。

位4,RAM0E:CLA数据RAM0使能。在更改该位与访问存储器之间,留出两个SY⁃SCLKOUT周期。

0:CLA数据SARAM块0被映射到主CPU程序与数据空间。CLA读返回0(默认)。

1:CLA数据SARAM块0被映射到CLA数据空间。主CPU只能通过调试访问该块。

位0,PROGE:CLA程序空间使能。在更改该位与访问存储器之间,要留出两个SY-SCLKOUT周期。

0:CLA程序SARAM被映射到主CPU程序与数据空间。如果CLA试图取程序指令,将会有与非法取操作码相同的结果(默认)。

1:CLA程序SARAM被映射到CLA程序空间。主CPU只能通过调试访问该块。

在此状态下,CLA取指令比CPU调试读具有更高的优先级

因此,如果CLA正在执行一个循环,CLA有可能长久阻止CPU调试访问。当最初开发CLA代码由于程序缺陷产生无限循环时,可能出现这种情况。为避免这个问题,当运行时,CLACPU调试读程序存储器将都返回0x0000(忽略写)。当CLA暂停或空闲时,那么可以完成正常的CPU调试读和写访问。

(3)CLA外设中断源选择寄存器1(CLA Peripheral Interrupt Source Select 1 Register,MP-ISRCSEL1)

每个任务都具有特定的可以启动它的外设。例如,任务2可以由ADCINT2或EPWM2_INT启动。配置MPISRCSEL1寄存器,可以设置哪一个可能的外设将启动任务。选择无中断源选项表示只能由CPU软件启动给定任务。该寄存器的格式如下。

位31~28,PERINT8SEL:任务8外设中断输入选择。

0000:ADCINT8是任务8的中断输入(默认)。

0010:CPU定时器0是任务8的中断输入。

xxx1:任务8无中断源。

位27~24,PERINT7SEL:任务7外设中断输入选择。

0000:ePWM7是任务7的中断输入(默认)。

0010:CPU定时器0是任务7的中断输入。(EPWM7_INT)

xxx1:任务7无中断源。

位23~20,PERINT6SEL:任务6外设中断输入选择。

0000:ADCINT6是任务6的中断输入(默认)。

0010:ePWM6是任务6的中断输入。(EPWM6_INT)

xxx1:任务6无中断源。

位19~16,PERINT5SEL:任务5外设中断输入选择。

0000:ADCINT5是任务5的中断输入(默认)。

0010:ePWM5是任务5的中断输入。(EPWM5_INT)

xxx1:任务5无中断源。

位15~12,PERINT4SEL:任务4外设中断输入选择。

0000:ADCINT4是任务4的中断输入(默认)。

0010:ePWM4是任务4的中断输入。(EPWM4_INT)

xxx1:任务4无中断源。

位11~8,PERINT3SEL:任务3外设中断输入选择。

0000:ADCINT3是任务3的中断输入(默认)。

0010:ePWM3是任务3的中断输入。(EPWM3_INT)

xxx1:任务3无中断源。

位7~4,PERINT2SEL:任务2外设中断输入选择。

0000:ADCINT2是任务2的中断输入(默认)。

0010:ePWM2是任务2的中断输入。(EPWM2_INT)

xxx1:任务2无中断源。

位3~0,PERINT1SEL:任务1外设中断输入选择。

0000:ADCINT1是任务1的中断输入(默认)。(www.daowen.com)

0010:ePWM1是任务1的中断输入。(EPWM1_INT)

xxx1:任务1无中断源。

(4)中断使能寄存器(Interrupt Enable Register,MIER)

设置中断使能寄存器MIER的位,可使得到来的中断或主CPU软件启动相应的CLA任务。写入0将阻止任务,但是中断请求仍然被锁存到标志寄存器(MIFLG)。在相应任务正在执行时,将MIER寄存器设置为0对任务无影响。任务继续运行直到遇到MSTOP指令。

当发出软件复位时,MIER位被清除。在发出软件复位与重新配置MIER位之间,至少要有1个SYSCLKOUT周期延迟。

中断使能寄存器MIER的格式如下。

位15~8,保留位。

位7,INT8:任务8中断使能位。

●0:任务8中断禁止(默认)。

●1:任务8中断使能。

位6~0,INT7~INT1:任务7~1的中断使能位,类似于任务8。

(5)中断标志寄存器(Interrupt Flag Register,MIFR)

中断标志寄存器的每一位对应一个CLA任务。当从外设中断接收到中断请求时,相应位自动置1。该位也可以通过主CPU写入MIFRC寄存器或IACK指令启动任务。为使用IACK指令开始一个任务,首先应在MCTL寄存器使能该特征。如果当接收到一个新的中断时该位已置1,那么MIOVF寄存器中的相应的溢出位将置1。

当任务开始执行时,相应的MIFR位自动清0。如果MIER寄存器的中断已使能且没有悬挂的更高级的任务,就出现这种情况。也可以通过写入MICLR寄存器手动清除这些位。写入MIFR寄存器被忽略。

中断标志寄存器MIFR的格式如下。

位15~8,保留位。

位7,INT8:任务8中断标志位。

●0:任务8中断当前没有置位标志(默认)。

●1:任务8中断已经收到且悬挂执行。

位6~0,INT7~INT1:任务7~1的中断标志位,类似于任务8。

(6)中断溢出标志寄存器(Interrupt Over flow Flag Register,MIOVF)

中断溢出标志寄存器的每一位对应一个CLA任务。当发生指定任务中断溢出事件时,相应位置1。当MIFR寄存器已经置1且从外设源接收到一个新的中断时,产生一个溢出事件。MIOVF位只受外设中断事件影响。它们对由主CPU IACK指令或直接设置MIFR位的任务请求无反应。中断溢出标志将保持锁存且只能通过写入溢出标志清除寄存器(MI⁃CLROVF)进行清零。写入MIOVF寄存器被忽略。

中断溢出标志寄存器MIOVF的格式如下。

位15~8,保留位。

位7,INT8:任务8中断溢出标志位。

●0:任务8中断溢出没有发生(默认)。

●1:任务8中断溢出已经发生。

位6~0,INT7~INT1:任务7~1的中断溢出标志位,类似于任务8。

(7)中断运行状态寄存器(Interrupt Run Status Register,MIRUN)

中断运行状态寄存器(MIRUN)指明当前哪一个任务正在运行。在任何时间MIRUN只有1位被设置为1。当任务完成且相应中断送到外设中断扩展(PIE)模块后,对应位被自动清零。这使得主CPU知道什么时候任务已完成。通过写入MCTL[SOFTRESET]位,主CPU能够停止一个正在运行的任务。这种情况下中断不送到PIE。

中断运行状态寄存器MIRUN的格式如下。

位15~8,保留位。

位7,INT8:任务8运行状态位。

●0:任务8没有执行(默认)。

●1:任务8正在执行。

位6~0,INT7~INT1:任务7~1的运行状态位,类似于任务8。

(8)中断强制寄存器(Interrupt Force Register,MIFRC)

中断强制寄存器可以用于由主CPU通过软件启动任务。向MIFRC位写入1将设置MI-FR寄存器的相应位。写0被忽略,读总返回0。IACK#16指令操作也可以用于启动任务且与MIFRC寄存器有同样的效果。为使能IACK设置MIFR位,应首先设置MCTL[IACKE]位。使用IACK具有不需要首先设置EALLOW位的优点。这使得主CPU可以通过软件有效触发CLA任务。

中断强制寄存器MIFRC的格式如下。

位15~8,保留位。

位7,INT8:任务8中断强制位。

●0:该位读总返回0,写0无效。

●1:写1强制任务8中断。

位6~0,INT7~INT1:任务7~1的中断强制位,类似于任务8。

(9)中断标志清除寄存器(Interrupt Flag Clear Register,MICLR)

通常MIFR寄存器的位在任务开始时自动清除。中断标志清除寄存器可以用于取代手动清除中断标志寄存器(MIFR)的位。向MICLR位写入1将清除MIFR寄存器的相应位。写0被忽略,读总返回0。

中断标志清除寄存器MICLR的格式如下。

位15~8,保留位。

位7,INT8:任务8中断标志清除位。

●0:该位读总返回0,写0无效。

●1:写1清除任务8中断标志。

位6~0,INT7~INT1:任务7~1的中断标志清除位,类似于任务8。

(10)中断溢出标志清除寄存器(Interrupt Over flow Flag Clear Register,MICLROVF)

MIOVF寄存器的溢出标志位被锁存直到采用MICLROVF寄存器手动清除。向MI-CLROVF位写入1,将清除MIOVF寄存器的相应位。写0被忽略,读总返回0。

中断溢出标志清除寄存器MICLROVF的格式如下。

位15~8,保留位。

位7,INT8:任务8中断溢出标志清除位。

●0:该位读总返回0,写0无效。

●1:写1清除任务8中断溢出标志。

位6~0,INT7~INT1:任务7~1的中断溢出标志清除位,类似于任务8。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈