在DSP 程序中外围模块,都会经历一个配置,也就是初始化。比如说PWMinit();ADCinit();等等。
我想知道这些初始化的函数在给这些模块初始新值后,会不会立即就动作起来呢?
比如说PWM里面设置了周期和计算方式,那在这个初始函数之后,是不是里面的计数器就已经在工作了,在计数了?
谢谢
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.
在DSP 程序中外围模块,都会经历一个配置,也就是初始化。比如说PWMinit();ADCinit();等等。
我想知道这些初始化的函数在给这些模块初始新值后,会不会立即就动作起来呢?
比如说PWM里面设置了周期和计算方式,那在这个初始函数之后,是不是里面的计数器就已经在工作了,在计数了?
谢谢
是的,PWM一个时钟后开始启动,你可以单步调试看执行完后PWM的counter是否在增加,同样地,对ADC,你也可以单步调试,看什么时候ADCRESULT寄存器的值开始发生改变。F28335的ADC没有这个位,这是以其它系列的芯片举的例,所以,以后的问题请尽量说清楚你的背景:使用哪颗芯片,什么程序,硬件如何等等,信息越详细对分析问题越有帮助。
不知道你是哪里看到的?有没有更详细的C或C++文件?
另外,它是在变量定义时呢还是使用时?
这更像是一个C/C++语言的一个基本问题,建议查看手册找找。
CNTL_2P2Z_INIT .macro n
;=============================
; allocate memory space for data & terminal pointers
_CNTL_2P2Z_Ref:n: .usect "CNTL_2P2Z_Section",2,1,1 ; reference input terminal
_CNTL_2P2Z_Fdbk:n: .usect "CNTL_2P2Z_Section",2,1,1 ; feedback input terminal
_CNTL_2P2Z_Out:n: .usect "CNTL_2P2Z_Section",2,1,1 ; output terminal
_CNTL_2P2Z_Coef:n: .usect "CNTL_2P2Z_Section",2,1,1 ; coefficients & saturation limits (14 words)
_CNTL_2P2Z_DBUFF:n: .usect "CNTL_2P2Z_Section",10,1,1 ; internal Data BUFF
这两段程序的区别是什么?谢谢。我也查了手册,但是没有搞懂。
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n:
我的理解:将CNTL_2P2Z_Ref:n:所在数据页面地址赋给DP,
将CNTL_2P2Z_Ref:n:所占据存储单元的首地址赋给XAR0
--------------------------------------------------------
MOVL XAR0, #_CNTL_2P2Z_Ref:n:
--------------------------------------------------------
我的理解:将CNTL_2P2Z_Ref:n:所占据存储单元的首地址赋给XAR0
不知道对不对,请指点!
你这样说的话,好像和下面的程序不一致啊,后面的程序用了 *XAR0
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n: ; net pointer to Ref (XAR0)
MOVW DP,#_CNTL_2P2Z_Fdbk:n:
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n: ; net pointer to Fdbk (XAR1)
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n: ; pointer to the DBUFF array (used internally by the module)
; calculate error (Ref - Fdbk)
MOVL ACC, *XAR0 ; ACC = Ref (Q24) = Q(24)
SUBL ACC, *XAR1 ; ACC = Ref(Q24) - Fdbk(Q24)= error(Q24)
LSL ACC, #6
你这样说好像不太对吧,因为在下面的程序里你可以看到 XAR0前面加了个 * 这个符号
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n: ; net pointer to Ref (XAR0)
MOVW DP,#_CNTL_2P2Z_Fdbk:n:
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n: ; net pointer to Fdbk (XAR1)
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n: ; pointer to the DBUFF array (used internally by the module)
; calculate error (Ref - Fdbk)
MOVL ACC, *XAR0 ; ACC = Ref (Q24) = Q(24)
SUBL ACC, *XAR1 ; ACC = Ref(Q24) - Fdbk(Q24)= error(Q24)
LSL ACC, #6 ; Logical left shift by 6, Q{24}<<6 -> Q{30}
;store error in DBUFF
MOVL *+XAR4[4], ACC ; e(n) = ACC = error Q{30}
MOVW DP,#_CNTL_2P2Z_Out:n:
MOVL XAR2, @_CNTL_2P2Z_Out:n: ; net pointer to Out (XAR2)
你这样说好像不太对吧,因为在下面的程序里你可以看到 XAR0前面加了个 * 这个符号
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n: ; net pointer to Ref (XAR0)
MOVW DP,#_CNTL_2P2Z_Fdbk:n:
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n: ; net pointer to Fdbk (XAR1)
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n: ; pointer to the DBUFF array (used internally by the module)
; calculate error (Ref - Fdbk)
MOVL ACC, *XAR0 ; ACC = Ref (Q24) = Q(24)
SUBL ACC, *XAR1 ; ACC = Ref(Q24) - Fdbk(Q24)= error(Q24)
LSL ACC, #6 ; Logical left shift by 6, Q{24}<<6 -> Q{30}
;store error in DBUFF
MOVL *+XAR4[4], ACC ; e(n) = ACC = error Q{30}
MOVW DP,#_CNTL_2P2Z_Out:n:
MOVL XAR2, @_CNTL_2P2Z_Out:n: ; net pointer to Out (XAR2)
MOVW DP,#_CNTL_2P2Z_Coef:n:
MOVL XAR3, @_CNTL_2P2Z_Coef:n: ; net pointer to Coef (XAR3)
你这样说好像不太对吧,因为在下面的程序里你可以看到 XAR0前面加了个 * 这个符号
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n: ; net pointer to Ref (XAR0)
MOVW DP,#_CNTL_2P2Z_Fdbk:n:
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n:
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n:
MOVL ACC, *XAR0
SUBL ACC, *XAR1
LSL ACC, #6
MOVL *+XAR4[4], ACC
MOVW DP,#_CNTL_2P2Z_Out:n:
MOVL XAR2, @_CNTL_2P2Z_Out:n:
MOVW DP,#_CNTL_2P2Z_Coef:n:
MOVL XAR3, @_CNTL_2P2Z_Coef:n:
ZAPA
你这样说好像不太对吧,因为在下面的程序里你可以看到 XAR0前面加了个 * 这个符号
MOVW DP, #_CNTL_2P2Z_Ref:n:
MOVL XAR0, @_CNTL_2P2Z_Ref:n: ; net pointer to Ref (XAR0)
MOVW DP,#_CNTL_2P2Z_Fdbk:n:
MOVL XAR1, @_CNTL_2P2Z_Fdbk:n:
MOVW DP,#_CNTL_2P2Z_DBUFF:n:
MOVL XAR4, #_CNTL_2P2Z_DBUFF:n:
MOVL ACC, *XAR0
SUBL ACC, *XAR1
LSL ACC, #6
MOVL *+XAR4[4], ACC
MOVW DP,#_CNTL_2P2Z_Out:n:
MOVL XAR2, @_CNTL_2P2Z_Out:n:
MOVW DP,#_CNTL_2P2Z_Coef:n:
MOVL XAR3, @_CNTL_2P2Z_Coef:n:
ZAPA