TMS320F2812的EALLOW和EDIS指令

本文详细介绍了F2812中EALLOW与EDIS宏的作用及使用方法。EALLOW用于取消配置寄存器的保护状态以便进行写操作,而EDIS则用于重新启用保护。此外,还解释了状态寄存器中的EALLOW标志位如何指示寄存器是否处于保护状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)宏EALLOW和宏EDIS一般是配套使用,在使用F2812的过程中,经常会看到main 函数的开头使用EALLOW这个宏。之所以使用它,是有原因的。因为F2812的一些配置寄存器是受保护的,无法直接写操作,EALLOW宏的使用相当于去掉了这些配置寄存的保护伞,是的可以直接写操作,​​而后使用EDIS宏,相当于重新启用这些配置寄存器的保护伞.

(2)EALLOW保护机制

配置寄存器当前是保护状态是由状态寄存器中的EALLOW位来指示的,注意这里的EALLOW是状态寄存器的某一标志位,并不是我们的宏操作指令EALLOW。宏操作指令EALLOW的使用,可以让状态寄存器中的EALLOW标志位置位,从而使得配置寄存器不再是保护状态,可以直接读取操作。

而EDIS可以清除状态寄存器中的EALLOW标志位​,使得这些配置寄存器重新进入受保护状态。

受EALLOW保护的配置寄存器有如下:

a.器件仿真寄存器

b.FLASH寄存器

c.CSM寄存器

d.PIE矢量表

e.系统控制寄存器

f.GPIO MUX寄存器

g.某些eCAN寄存器

(3)​​在复位时状态寄存器中的EALLOW标志 位被清除以启用EALLOW 保护。在受保护时,CPU 对受保护寄存器进行的所有写入被忽略且只允许CPU 读取、JTAG 读取和JTAG 写入。如果设置了此位,则通过执行EALLOW 指令可以允许CPU 自由写入受保护的寄存器。在修改寄存器之后,可以通过执行EDI 指令清除EALLOW 位使它们再次受保护。

### 关于TMS320F2812编程教程及示例代码 #### TMS320F2812编程环境设置 为了有效地编写调试针对TMS320F2812的程序,开发者通常会使用Code Composer Studio (CCS),这是由德州仪器(TI)提供的一款集成开发环境(IDE)[^1]。通过安装并配置好该软件之后,可以创建新的项目来管理源文件、头文件以及链接器命令文件。 #### 初始化外设接口 初始化过程中涉及到对外部设备的支持,比如模拟数字转换器(ADC), 脉宽调制(PWM), 通用输入输出(GPIO)等功能模块。下面是一个简单的C语言函数用于开启片内外置定时器: ```c void InitTimer(void){ // 停止计数器工作 TmrRegs.TCR.bit.TSS = 1; // 设置周期寄存器值 TmrRegs.PRD.all = 59999; // 清除中断标志位 TmrRegs.TISR.bit.TIF=1; // 启动计数器 TmrRegs.TCR.bit.TRB = 1; } ``` 这段代码展示了如何停止定时器操作, 设定其周期长度, 并最终重新启动它. #### ADC数据采集实例 对于需要处理来自传感器或其他外部信号的情况来说,利用内置AD转换功能是非常重要的一步。这里给出一段读取单通道电压水平的例子: ```c Uint16 ReadAdcChannel(Uint16 channel){ AdcRegs.ADCCTL2.bit.RST_SEQ1 = 1; // Reset sequencer 1 EALLOW; AdcRegs.CHSELSEQ1.bit.CONV0 = channel; // Select the input channel to be converted first. EDIS; while (!AdcRegs.ADCSTAT.bit.INTDONE); // Wait until conversion is complete return AdcResult.Result1; // Return result of last completed conversion on SEQ1 } ``` 此部分说明了怎样重置序列化器、指定要采样的具体信道号,并等待直到完成一次完整的A/D变换过程后再返回所获得的结果. #### PWM波形生成样例 当应用领域涉及电机控制或者LED亮度调节等方面时,则可能需要用到PWM技术。以下是有关设定特定占空比的方法之一: ```c void SetPwmDutyCycle(float duty_cycle_percent){ Uint16 period_value = TBPRD / ((float)(duty_cycle_percent/100)); EPwm1Regs.CMPA.half.CMPA = period_value; } ``` 上述片段解释了计算方法及其参数意义,即基于给定百分比形式表示的目标占空率去调整比较匹配寄存器中的数值从而改变输出脉冲宽度.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值