主题中讨论的其他器件:MSP430WARE、、、 MSP-EXP430FR5969
我的 eSCU_A1模块的 SPI CLK 输出有问题。 由于我的代码不起作用、我为一个3 SPI 主控器拉取了 eSCU_A0模块示例代码的 TI 示例、并为 eSCU_A1模块修改了该示例。 遗憾的是、该代码也不起作用。 我在 SPI 引脚上放置了一个示波器、
A1 SPI CLK ->(预期=时钟、测量=噪声、无时钟)
A1 SPI SIMO ->(预期=数据包、测量的=数据包)
A1 SPI SOMI ->无驱动器(预期值=噪声、测量值=噪声)
这是测试代码。 我在论坛上搜索过、但无法找到适合我的解决方案的类似问题。 有什么建议吗?
/*-版权-, BSD_EX
*版权所有(c) 2012、德州仪器(TI)公司
保留所有权利。
*
*以源代码和二进制形式重新分发和使用,有或没有
*修改,在以下条件允许的条件下
*满足:
*
** 源代码的重新分发必须保留以上版权
* 请注意,本条件清单和以下免责声明。
*
** 二进制形式的再分发必须复制上述版权
* 通知,本条件清单和下述免责声明在
* 与分发一起提供的文档和/或其他材料。
*
** 德州仪器公司名称或公司名称
* 其贡献者可用于认可或推广派生的产品
* 从本软件未经事先书面许可。
*
*本软件由版权持有者和贡献者"按原样"提供
本站明确声明不作出任何种类的所有明示或暗示的保证,包括但不限于关于适销性、适用于
*对特定产品的适销性和适用性的暗示保证
*免责声明。 在任何情况下,版权所有者或
*贡献者对任何直接、间接、偶然、特殊、
*示例性或后果性损害(包括但不限于:
*替代产品或服务的采购;使用、数据或利润的损失;
*或业务中断)然而造成和任何责任理论,
*无论是合同,严格的责任,或侵权(包括疏忽或
*其他)因使用本软件而产生的任何原因、
*即使被告知此类损害的可能性。
*
*
*
* msp430代码示例免责声明
*
* MSP430代码示例是自包含的低级程序、通常
*以高度优化的方式演示单个外设功能或设备特性
*简洁的方式。 为此、代码可依赖于器件的加电默认值
*寄存器的值和设置,如时钟配置和小心必须
*在合并来自几个示例的代码时采取,以避免潜在的侧
*效果。 有关 GUI、另请参阅 www.ti.com/grace 和 www.ti.com/msp430ware
*针对外设配置的 API 函数库方法。
*
*-/版权-*/
//*****
// MSP430F59xx 演示- eUSCI_A1、SPI 3线主器件增量数据
//
// 说明:SPI 主器件使用3线制模式与 SPI 从器件通信。 递增
// 数据由从0x01开始的主器件发送。 接收到的数据应
// 与之前的发送相同,TXData = RXData -1。
// USCI RX ISR 用于处理与 CPU 的通信,通常在 LPM0中。
// ACLK = 32.768kHz、MCLK = SMCLK = DCO ~1MHz。 BRCLK = ACLK/2
//
//
// MSP430FR5969
//-------------------------------------------------------
// /|\|
// | ||
// --|RST |
// |
// | P2.5|->数据输出(UCA1SIMO)
// |
// | P2.6|<-数据输入(UCA1SOMI)
// |
// | P2.4|->串行时钟输出(UCA1CLK)
//
//*****
#包含
Volatile unsigned char RXData = 0;
Volatile unsigned char TXData;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
//配置 GPIO
P2SEL1 |= BIT4 | BIT5 | BIT6; // USCI_A1操作
// P2SEL0 &=~(BIT4 | BIT5 | BIT6);
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;
//配置 USCI_A1以进行 SPI 操作
UCA1CTLW0 = UCSWRST; //**将状态机置于复位状态**
UCA1CTLW0 |= UCMST | UCSYNC | UCCKPL | UCMSB;// 3引脚8位 SPI 主控
//时钟极性高,MSB
UCA1CTLW0 |= UCSSEL_SMCLK; // SMCLK
UCA1BR0 = 0x02; ///2
UCA1BR1 = 0; //
UCA1MCTLW = 0; //无调制
UCA1CTLW0 &&~UCSWRST; //**初始化 USCI 状态机**
UCA1IE |= UCRXIE; //启用 USCI_A1 RX 中断
TXData = 0x1; //保存 TX 数据
while (1)
{
UCA1IE |= UCTXIE;
__ bis_SR_register (LPM0_bits | GIE); // CPU 关闭、启用中断
__delay_cycles (2000); //下一次传输之前的延迟
TXData++; //递增发送数据
}
}
#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A1_vector
__interrupt void USCI_A1_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (USCI_A1_vector))) USCI_A1_ISR (void)
#else
#错误编译器不受支持!
#endif
{
switch (__even_in_range (UCA1IV、USCI_SPI_UCTXIFG))
{
USCI_NONE:中止;
案例 USCI_SPI_UCRXIFG:
RXData = UCA1RXBUF;
UCA1IFG &=~μ H UCRXIFG;
__BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//唤醒以设置下一个 TX
中断;
案例 USCI_SPI_UCTXIFG:
UCA1TXBUF = TXData; //发送字符
UCA1IE &=~UCTXIE;
中断;
默认值:中断;
}
}