原本想优化一下模拟IIC通讯的时序,使原有延时尽量缩短,但后来发现实际测量的指令周期和手册上写的不符,不知为什么~望高手指点。
我用的芯片型号是MSP430F5438 测试代码如下:
#include <msp430.h>
main()
{
WDTCTL = WDTPW + WDTHOLD;
UCSCTL3 = 0;
UCSCTL0 |= 16 << 8;
UCSCTL1 = DCORSEL_4;
UCSCTL2 = 149;
UCSCTL6 &= ~(XT1DRIVE_3);
UCSCTL4 = SELA_0 + SELS_3 + SELM_3;
P6DIR = 0xFF;
P6OUT = 0xFF;
P6OUT = 0x00;
P6OUT = 0xFF;
P6OUT = 0x00;
while(1);
}
外部接32768Hz晶振,经过150倍频后,MCLK约为4.9MHz,此时一个指令周期约203ns。
P6OUT = 0xFF;和 P6OUT = 0x00;两句的汇编代码是
mov.b #0xFF, &PCOUT_H 和 clr.b &PCOUT_H
根据手册执行这两句的时间我认为应该是4+4 = 8个时钟周期(约1600ns)。
而示波器上观察输出方波的周期为700ns而我觉得该时间和执行P6OUT = 0xFF; P6OUT = 0x00;两句的时间应该是相同的。
求指点:我的测试哪里出问题了呢~? |