请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2230 您好!
我的 SPI 通信有问题:使用示波器测量的第一个传输字节错误:我使用示波器0x104 (0b100000100)读取(9个时钟周期!!!) 非0x04 (0b00000100)(8个时钟)
这是 main():
WDTCTL = WDTPW | WDTCNTCL; //看门狗开启 P1REN = 0x1B; //正确终止不可用的 Port1引脚(P1.0/1/3/4),在启用下拉的情况下配置为输入 BCSCTL3 |= LFXT1S_2; //选择 VLO 作为低频率时钟 BCSCTL2 |= DIVS_1; // SMCLK = 0.5 MCLK 0 WD 每隔64ms 复位一次 P1OUT |= BIT2; P1DIR |= BIT2 | BIT5 | BIT6 | BIT7; //设置端口1输出 USICTL0 |= USIPE7 | USIPE6 | USIPE5 | USIMST | USIOE; //端口、SPI 主器件 USICTL1 |= USICKPH; //设置相位 USICKCTL = USIDIV_1 | USISSEL_2; // SPI clk =/2 SMCLK、低时钟极性 USICTL0 &=~(USISWRST); //释放 USI 以进行操作 // USISRL = 0x04; //数据寄存器地址 USICNT = 8; //重载计数器 _DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息 */ P1OUT &=~BIT2; // CS DAC _DELAY_CYCLES (4); USISRL = 0x04; //数据寄存器地址 USICNT = 8; //重载计数器 _DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息 USISRL = 0xA0; //数据 USICNT = 8; //重载计数器 _DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息 USISRL = 0x0; //数据 USICNT = 8; //重载计数器 _DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息 P1OUT |= BIT2; // CS DAC _bis_SR_register (LPM0_bits + GIE); //输入带中断的 LPM0
当我在 芯片选择线路处于非活动状态时添加虚拟写入(代码的注释部分)时、通信工作正常。 有什么想法、为什么 MSP 一开始就添加一个时钟?