【F28335】EALLOW和EDIS指令的使用

        在F28335的程序编写中,经常会对寄存器的值进行修改,但为了避免在工作过程中寄存器的值发生误操作,F28335对寄存器有保护功能,必须先解除保护功能才能对寄存器进行操作。

        EALLOW(Edit ALLOW)指令用于允许对寄存器进行操作,即解除寄存器保护功能。

        EDIS(Edit DISABLE)指令用于失能寄存器操作功能,重新恢复对寄存器的保护功能。

代码案例

    EALLOW; //解除对寄存器的保护

    PieVectTable.ADCINT = &ADC_ISR;     //ADC中断
    PieVectTable.TINT0 = &ISRTimer0;    //Timer0中断

    GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;   // Enable pull-up on GPIO32 (EPWMSYNCI)
    GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 0;  // Synch to SYSCLKOUT GPIO32 (EPWMSYNCI)
    GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 2;   // Enable pull-up on GPIO32 (EPWMSYNCI)

    EDIS;   //Edit disable,恢复寄存器的被保护状态

        从代码案例可以看出,在对PIE中断向量、GPIO多路选择寄存器、GPIO上拉寄存器、GPIO引脚时钟模式寄存器进行配置时,需要先使用EALLOW进行保护解除,配置完成后使用EDIS恢复保护状态。

个人思考:

        除了上述寄存器,还有哪些寄存器受保护?

        器件仿真寄存器、闪存寄存器、CSM寄存器、系统控制寄存器、某些eCAN寄存器(一些寄存器本人并未使用过,摘自CSDN博主----种瓜大爷)       

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用f28335的ADC采样交流电压的Simulink模型: ![Simulink模型](https://img-blog.csdnimg.cn/20210804102137569.png) 模型中使用了"Embedded Coder Support Package for Texas Instruments C2000 Processors"来生成C语言代码,因此需要安装该支持包。 具体步骤如下: 1. 在Simulink中添加一个"Embedded Coder Configuration"块,并选择"Texas Instruments C2000"。 2. 配置"Target hardware resources",选择"Texas Instruments F2833x/F2834x"。 3. 配置"Code generation",选择"ERT-based system"。 4. 在模型中添加ADC采样块,配置采样参数。 5. 添加Scope块,用于查看采样结果。 6. 运行模型并观察Scope块输出结果。 以下是示例代码: ``` #include "F2837xD_device.h" #include "F2837xD_Examples.h" #pragma CODE_SECTION(Adc_Config, ".TI.ramfunc"); void Adc_Config() { EALLOW; // 使能ADC AdcaRegs.ADCCTL1.bit.ADCREFSEL = 0; // 内部参考电压 AdcaRegs.ADCCTL1.bit.ADCREFPWD = 1; // 参考电压电路电源打开 AdcaRegs.ADCCTL1.bit.ADCPWDN = 1; // ADC电源打开 AdcaRegs.ADCCTL1.bit.ADCENABLE = 1; // ADC使能 // 配置采样窗口 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // EPWM1 SOCA触发 AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; // A0通道 AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14; // 采样窗口时间 EDIS; } void main() { // 初始化系统时钟 InitSysCtrl(); // 配置ADC Adc_Config(); // 初始化Scope InitScopes(); while(1) { // 等待采样完成 while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0); // 清除标志 AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // 读取采样值 Uint16 adc_val = AdcaResultRegs.ADCRESULT0; // 输出到Scope SendData(SCOPE1, &adc_val, 1); } } ``` 注意,由于该模型采样的是交流电压,因此需要使用差分输入模式,并注意正确接线。具体请参考相关文献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值