msp430f1611的spi接口与mcp2515通讯的问题

2019-03-24 12:58发布

最近在做CAN通讯,使用的CAN控制器芯片是mcp2515,写了spi读写mcp2515内部寄存器的函数。代码编写在ccs平台下,版本5.2。就是调试的时候全速运行和单步运行step over时,
结果不对,spi发送的数不对,读出的结果也不对。程序卡在一个地方死循环。


但是单步运行(step into)时,并且函数里面的每一步也运行,结果就是对的。
哎,纠结啊,哪里有问题啊,希望大家帮帮我,哪里出问题了,如果spi接口都搞不定还怎么做CAN通信啊

我把主要函数也列出来吧,是不是程序写的也有问题,
//SPI接口初始化
void SPI_Init(void)                           
{
    ME1 |= USPIE0;                            // Enable USART0 SPI mode
    UCTL0 |= CHAR + SYNC + MM;                // 8-bit SPI Master **SWRST**
    UTCTL0 |= CKPL + SSEL1 + SSEL0 + STC;            // SMCLK, 3-pin mode
    UBR00 = 0x02;                             // UCLK/2
    UBR10 = 0x00;                             // 0
    UMCTL0 = 0x00;                            // no modulation
    UCTL0 &= ~SWRST;                          // Initialize USART state machine
    P3SEL |= 0x0E;                            // P3.1-3 SPI option select
    MCP2515_CS_OUTDIR();
    MCP2515_SET_CS();
}
//SPI写mcp2515的寄存器
void SPI_WriteReg(uint RegAdr,uint RegData)
{
    MCP2515_CLR_CS();
    _NOP();
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = d2510Wrt;      //写写指令
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = RegAdr;        //写地址
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = RegData;       //写数据
    while (!(IFG1 & UTXIFG0));
    _NOP();
    MCP2515_SET_CS();
}
//SPI读mcp2515里的寄存器
uint SPI_ReadReg(uint RegAdr)
{
    volatile unsigned int temp = 0;

    MCP2515_CLR_CS();
    _NOP();
    RXBUF0 = 0x00;           //清接收缓冲
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = d2510Rd;        //写读指令
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = RegAdr;         //写读地址
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = 0x00;           //写1空白字节
    while (!(IFG1 & UTXIFG0));
    temp = RXBUF0;
    _NOP();
    MCP2515_SET_CS();

    return temp;
}
//SPI复位mcp2515
void SPI_Reset(void)
{
    volatile unsigned int temp =0;

    MCP2515_CLR_CS();
    _NOP();
    while (!(IFG1 & UTXIFG0));
    TXBUF0 = d2510Reset;     //写复位指令
    while (!(IFG1 & UTXIFG0));
    _NOP();
    MCP2515_SET_CS();
    do
    {
        temp = SPI_ReadReg(CANSTAT);
    }
    while(temp != CAN_Config_Mode);
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
linda
2019-03-24 17:04
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章