This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335例程中ADC_cal()移位的问题请教?谢谢

专家你好!

ADC_cal

   MOVW  DP,   #ADCREFSEL_LOC >> 6

   MOV   @28,  #0xAAAA            ; actual value may not be 0xAAAA

   MOV   @29,  #0xBBBB             ; actual value may not be 0xBBBB

   LRETR

第一条指令移位6位?ad不是12位精度么 16位的数据不是移位4位么?呵呵 那个ADCREFSEL_LOC看不懂 主要是  麻烦解释下 谢了0...0可以的话把后面两句指令也解释下 呵呵

  • 额 专家上面还有一条语句是这样的 看不懂

    .def _ADC_cal

    .asg "0x711C",   ADCREFSEL_LOC

  • 你好!

    .def _ADC_cal                                          /* 定义代码段名称 */

    .asg "0x711C",   ADCREFSEL_LOC          /* ADCREFSEL_LOC 是 ADC Reference Select Register, 地址0x711C */

    /* C28 core 中, DP是 数据段 的 地址,每段大小64, 32bitDataAddr(21:6) = DP(15:0) */

    MOVW  DP,   #ADCREFSEL_LOC >> 6  /* 右移动6bit 获得 数据段首地址 */

    /* 此时, DP = 0x7100 */

    MOV   @28,  #0xAAAA   /* 地址 : 0x7100 + 28 */

    MOV   @29,  #0xBBBB   /* 地址 : 0x7100 + 29 */

  • 谢谢 秋之初的回答

  • MOVW  DP,   #ADCREFSEL_LOC >> 6  /* 右移动6bit 获得 数据段首地址 */

    /* 此时, DP = 0x7100 */

    怎么理解 右移6位 又没有移回去啊?

    0xAAAA

    0xBBBB

    怎么理解啊

    谢谢

  • 这是通过BOOT 模式中,经由ADC_cal进行引导,再进入main()函数代码吧?

  • 秋之初你好,想请教你几个问你。

    1、根据的的学习理解,对ADC矫正应该是根据下面的图进行,通过精准电源求得偏移然后对采样修正。而adc_cal函数的矫正原理是什么呢?

    2、手册说adc_cal函数是对ADCFEFSEL和ADCOFFTRIM寄存器初始化,但是ADCFEFSEL寄存器是参考电压选择,怎么是矫正呢?

    3、另外,该代码的最后两句的意思是什么呢,是向ADCREFSEL 写0xAAAA ,向ADCOFFTRIM 写 0xBBBB吗?

    4、如果ADC_cal函数可以起到矫正作用,请问在实际操作中是不是应该自己再对其代码进行一些修改,还是直接调用呢?