TI论坛
直播中

李巍

8年用户 1532经验值
私信 关注
[问答]

为什么DAC12CALON位不能置一?


  • DAC12_0CTL &= ~DAC12ENC;  
    DAC12_0CTL |= 0XFFFC;   //for test
    DAC12_0CTL = DAC12IR + DAC12AMP_5;     
    DAC12_0CTL |= DAC12CALON;
    while(DAC12CALON&DAC12_0CTL);//wait calibration finished
    Debugging Result:第二句测试用,仿真调试时结果为0XFDFC,DAC12CALON位没有置1,同样第四句没有置一,第五局直接跳过。
    question:为什么DAC12CALON位不能置一。

回帖(1)

京五环以外

2025-2-6 18:08:16
从您提供的代码和调试结果来看,您在尝试设置DAC12CALON位时遇到了问题。让我们逐步分析可能的原因:

1. 首先,您使用了`DAC12_0CTL &= ~DAC12ENC;`来清除DAC12ENC位。这一步是正确的,因为您需要确保DAC12ENC位为0才能进行校准。

2. 接下来,您使用了`DAC12_0CTL |= 0XFFFC;`来设置DAC12_0CTL寄存器的值。这里您设置了一个掩码,将除了DAC12ENC位之外的所有位都设置为1。但是,DAC12CALON位也被设置为1了。这可能是导致问题的原因。

3. 然后,您将`DAC12IR`和`DAC12AMP_5`的值赋给`DAC12_0CTL`。这一步可能会覆盖之前设置的DAC12CALON位。

4. 您尝试使用`DAC12_0CTL |= DAC12CALON;`来设置DAC12CALON位。但是,由于之前的赋值操作可能已经覆盖了DAC12CALON位,所以这一步没有效果。

5. 最后,您使用`while(DAC12CALON & DAC12_0CTL);`来等待校准完成。但是,由于DAC12CALON位没有被正确设置,这个循环可能直接跳过。

综上所述,问题可能出在第二步和第三步的赋值操作。为了解决这个问题,您可以尝试以下步骤:

1. 在第二步中,不要使用掩码0XFFFC,而是使用一个只包含DAC12CALON位的掩码。例如:`DAC12_0CTL |= DAC12CALON;`

2. 在第三步中,确保在赋值之前已经正确设置了DAC12CALON位。

3. 重新检查代码,确保没有其他操作覆盖了DAC12CALON位。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分