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.

[参考译文] MSP430F5529:MSP430F5529

Guru**** 2044370 points
Other Parts Discussed in Thread: MSP430F5529, LMX2595
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/880419/msp430f5529-msp430f5529

器件型号:MSP430F5529
主题中讨论的其他器件: LMX2595

大家好。 我在 MSP430F5529上工作的时间从几个月开始。 我的应用领域是使 MSP430F5529在主模式下运行、并以串行方式将24位数据传输到从器件(LMX2595)。 因此、我参考了资源浏览器中提供的示例代码、并根据我的应用进行了修改。 是否可以在下面找到任何代码、请告诉我需要进行的任何更正。  

1) 1)如何检查数据是否传输到从器件、我是说如果没有从器件、我可以通过将控制器与 LCD 显示屏连接来检查数据。

2) 2)如何结合使用中断 LPMx 和 ISR 模式

3) 3)一旦数据被移位并加载到 TX 缓冲区中、我如何能够写入从器件中。 需要 Write 函数。

#include
#include
#include

void IOInitiate(void);
void SPI_MASTER_INITIATE (void);
//void SPI_write (unsigned char * data、unsigned char count);
无符号长整型寄存器;
unsigned int reg=79;

#define 虚拟0xFF
#define STE 1.
#define SIMO 2.
#define SOMI 3.
#define CLK 4.
#define CS_REG P2OUT
#define CS_BIT BIT7
#define SLAVE_CS_DIR P2DIR
#define SLAVE_CS_PIN BIT0
#define MAX_BUFFER_SIZE 10
typedef 枚举 SPI_ModeEnum{
IDLE_MODE、
TX_REG_ADDRESS_MODE、
RX_REG_ADDRESS_MODE、
TX_DATA_MODE、
RX_DATA_MODE、
TIMEOUT_MODE
} SPI_Mode;
SPI_Mode MasterMode = IDLE_MODE;
uint8_t TransmitRegAddr = 0;
uint8_t ReceiveBuffer[MAX_Buffer_SIZE]={0};
uint8_t RXByteCtr = 0;
uint8_t ReceiveIndex = 0;
uint8_t TransmitBuffer[MAX_Buffer_SIZE]={0};
uint8_t TXByteCtr = 0;
uint8_t TransmitIndex = 0;

unsigned char 计数;
void SPI_write (unsigned char *数据、unsigned char count)

静态 unsigned char cnt;
CS_REG &=~CS_BIT;
for (cnt=0;cnt < count;count++)

while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF =数据[cnt];

while (UCB0STAT 和 UCBUSY);
CS_REG |= CS_BIT;

空 initClockTo16MHz()

UCSCTL3 |= SELREF_2;//设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2;//设置 ACLK = REFO
_bis_SR_register (SCG0);//禁用 FLL 控制循环
UCSCTL0 = 0x0000;//设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_5;//选择 DCO 范围16MHz 运行
UCSCTL2 = FLLD_0 + 487;//将 DCO 乘法器设置为16MHz
//(N + 1)* FLLRef = Fdco
//(487 + 1)* 32768 = 16MHz
//设置 FLL Div = fDCOCLK
_BIC_SR_register (SCG0);//启用 FLL 控制环路
// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 16 MHz/32、768Hz = 500000 = DCO 稳定的 MCLK 周期
_DELAY_CYCLES (50000);//
//循环直到 XT1、XT2和 DCO 故障标志被清除
操作

UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1&OFIFG);//测试振荡器故障标志

空 initGPIO()

//LED
P1OUT = 0x00;//针对 LED 和复位输出设置 P1
P1DIR |= BIT0 + BIT5;

P4DIR |= BIT7;
P4OUT &=~(BIT7);

//SPI 引脚
P3SEL |= BIT3 + BIT4;// P3.3、4选项选择
P2SEL |= BIT7;// P2.7选项选择

//按钮启动传输
P1DIR &=~BIT1;//将 P1.1设置为输入方向
P1REN |= BIT1;//启用 P1.1内部电阻
P1OUT |= BIT1;//将 P1.1设置为上拉电阻
P1IES |= BIT1;// P1.1高/低边沿
P1IFG &=~BIT1;// P1.1 IFG 被清零
P1IE |= BIT1;// P1.1中断被启用

空 initSPI()

//时钟极性:无效状态为高电平
//MSB 优先、8位、主器件、3引脚模式、同步
UCA0CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 |= 0x20;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;// SPI 必须清除无调制
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
UCA0IE |= UCRXIE;//启用 USCI0 RX 中断

SLAVE_CS_DIR |= SLAVE_CS_PIN;
//slave_CS_out |= slave_CS_PIN;

unsigned int cnt = 0;
unsigned long register_values[79]={0x00251C、0x010808、0x020500、0x030642、0x040A43、0x0500C8、0x06C802、0x0740B2、
0x08200、0x091604、0x0A10D8、0x0B0018、0x0C5001、0x0D40、0x0E1E40、0x0F064F、
0x100080、0x11012C、0x120064、0x1327B7、0x14E048、0x15040、0x160001、0x17007C、
0x18071A、0x190C2B、0x1A0DB0、0x1B0003、0x1C0488、0x1D318C、0x1E318C、0x1F43EC、
0x200393、0x211E21、0x220000、0x230004、0x24002A、0x250404、0x26FFFF、0x27FFFA、
0x280000,0x290000,0x2A7FFF,0x2BFFF,0x2C0AE3,0x2DD0DF,0x2E07FD,0x2F0300,
0x300300、0x314180、0x320000、0x330080、0x340820、0x350000、0x360000、0x370000、
0x380000,0x3900200x3A8001,0x3B0001,0x3C0000,0x3D00A8,0x3E0322,0x3F0000,
0x401388、0x410000、0x4201F4、0x430000、0x4403E8、0x450000、0x46C350、0x470081、
0x480001、0x49003F、0x4A0000,0x4B0800,0x4C000C、0x4D0000,0x4E0003};


int main (空)


WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
P3SEL |= 0x18;
UCA0CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 |= 0x20;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;// SPI 必须清除无调制
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
UCA0IE |= UCRXIE;


//unsigned char 计数;

//unsigned int reg;

for (cnt=0;cnt < reg;cnt++)

while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF = register_values[cnt]>16;
void SPI_write (unsigned char *数据、unsigned char count);
while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF = register_values[cnt]>8;
void SPI_write (unsigned char *数据、unsigned char count);
while (!(UCB0IFG & UCTXIFG));
UCB0TXBUF = register_values[cnt];
void SPI_write (unsigned char *数据、unsigned char count);

//unsigned long registervalues;
//registerervalues=UCB0TXBUF;

我找不到足够的数据、我认为这是唯一可以帮助我的论坛。 仔细阅读随附的代码、并在我时间不足时告知我如何纠正错误。  

我们将非常感谢您的任何帮助。  

  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Singam、

    让我快速回答您的问题。

    1) 1)如何检查数据是否传输到从器件、我是说如果没有从器件、我可以通过将控制器与 LCD 显示屏连接来检查数据。

    您可以通过示波器示波器来示波器上的 TX 引脚。 对于"LCD 显示屏"、我无法理解、您还应该有一个从器件来接收数据、并有一个 LCD 驱动器来驱动 LCD。

    2) 2)如何结合使用中断 LPMx 和 ISR 模式

    我对您的问题感到困惑。 ISR 代表中断服务例程。 请参阅 LPM 模式后中断的代码示例。

    3) 3)一旦数据被移位并加载到 TX 缓冲区中、我如何能够写入从器件中。 需要 Write 函数。

    数据加载到 TX 缓冲区后、将被传输到从器件。 不需要任何功能。 请参阅用户指南中的 UART 一章。

    当您要求检查代码时、您应该分享您在运行代码时遇到的问题。