MSP430F5529的SPI读写操作问题

2019-08-04 20:14发布

本帖最后由 jixueyuan163 于 2014-5-26 16:49 编辑

大神好,我是一位430的初学者,我自己设计的电路是通过f5529的spi接口控制一个前端的AFE芯片

我画的电路连接方式是用UCB1的3线SPI口(P4.1~P4.3),而P4.0作为前端的片选CS(低有效)

现在遇到的问题是 模拟前端的芯片给出了例如初始化,读写寄存器,复位等的通用代码  并给了一个Communication.c的接口程序用于不同的控制器来控制

在这个C文件中定义了SPI_Init () , SPI_Write () , SPI_Read ()  三个函数

初始化函数我觉得自己写的应该没有问题  而读写函数不太会写
/***************************************************************************//**
* @brief Writes data to SPI.
*
* @param data - data represents the write buffer.
* @param bytesNumber - Number of bytes to write.
*
* @return Number of written bytes.
*******************************************************************************/
unsigned char SPI_Write(unsigned char* data,
                                                unsigned char bytesNumber)
{
    unsigned char byte = 0;
    P4OUT &= ~BIT0;                               // 将CS置低开始传输
   
      for(byte = 0; byte < bytesNumber; byte++)
      {
        while (!(UCB1IFG&UCTXIFG));               // USCI_B1 TX buffer ready?
        UCB1TXBUF = data[byte];                    // Transmit first character           
      }
   
    P4OUT |= BIT0;                               // 将CS置高完成传输
      
        return bytesNumber;
}


这个是我的写的代码  总觉得哪里不对  在编译debug的时候 似乎在循环执行某句话(我也不知道为啥我的IAR debug的时候看不到绿 {MOD}的箭头指示)

另外附上我的读的代码  读的代码……肯定不对  我在学习spi的时候 理解到的SPI传输方式应该是在写的后半个时钟周期就会自动读……
但是到了自己写代码的时候就模模糊糊不知道怎么判断。另外就是想问,我的那个SPI_Write()代码是轮询方式么?还是中断方式,需不需要写中断向量函数
/***************************************************************************//**
* @brief Reads data from SPI.
*
* @param data - Data represents the read buffer.
* @param bytesNumber - Number of bytes to read.
*
* @return Number of read bytes.
*******************************************************************************/
unsigned char SPI_Read(unsigned char* data,
                                           unsigned char bytesNumber)
{
    unsigned char byte = 0;
    P4OUT &= ~BIT0;                               // 将CS置低开始传输
   
  for(byte = 0; byte < bytesNumber; byte++)
      {
        while (!(UCB1IFG&UCTXIFG));               // USCI_B1 RX buffer ready?
         data[byte] = UCB1RXBUF;                     // Transmit first character           
      }
  
    P4OUT |= BIT0;                               // 将CS置高完成传输
  
        return bytesNumber;
}




  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
jixueyuan163
1楼-- · 2019-08-04 20:46
为什么一发贴就写的此贴已结……木有结啊~偶好可怜
ar_m_cu
2楼-- · 2019-08-05 00:27
本帖最后由 ar_m_cu 于 2014-5-26 17:20 编辑
jixueyuan163 发表于 2014-5-26 16:47
为什么一发贴就写的此贴已结……木有结啊~偶好可怜

因为你没有给分.按照你写的不用写中断函数
ar_m_cu
3楼-- · 2019-08-05 01:50
unsigned char SPI_Read(unsigned char* data,
                                           unsigned char bytesNumber)
{
    unsigned char byte = 0;
    P4OUT &= ~BIT0;                               // 将CS置低开始传输
   
  for(byte = 0; byte < bytesNumber; byte++)
      {
        while (!(UCB1IFG&UCTXIFG));               // USCI_B1 RX buffer ready?
        UCB1TXBUF = 0x55;
        while (!(UCB1IFG&UCTXIFG));

        data[byte] = UCB1RXBUF;                     // Transmit first character           
      }
  
    P4OUT |= BIT0;                               // 将CS置高完成传输
  
        return bytesNumber;
}
jixueyuan163
4楼-- · 2019-08-05 02:08
 精彩回答 2  元偷偷看……
ar_m_cu
5楼-- · 2019-08-05 03:36
本帖最后由 ar_m_cu 于 2014-5-26 17:23 编辑
jixueyuan163 发表于 2014-5-26 17:20
现在可以编辑给加分么?刚注册了,也不知道有没有分……

貌似不可以了。不过可以右下角“评分”
jixueyuan163
6楼-- · 2019-08-05 07:32
ar_m_cu 发表于 2014-5-26 17:22
貌似不可以了。不过可以右下角“评分”

我的论坛级别只能给你加1分……

话说试着调试一下还有问题
我的IAR在调试单个main()函数的时候  会有一个绿 {MOD}的箭头指着到哪句了
这个工程中有好几个C文件 调试的时候没有箭头  看的比较乱
您知道有什么办法能解决不?

一周热门 更多>