打印

请教关于msp430g2553 uscib0 spi 的程序问题

[复制链接]
5081|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
874692826|  楼主 | 2013-11-16 20:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 874692826 于 2013-11-16 22:50 编辑

关于msp430g2553 uscib0 spi 的程序可以这样写吗??(不用中断,不是IO模拟SPI)
void Init_SPI(void) {
  // SCS -  P2.0
   // SCLK - P1.5     
   // MISO - P1.6
   // MOSI - P1.7

    P1DIR |= BIT5 + BIT6 + BIT7;
    P1SEL |= BIT5 + BIT6 + BIT7;
    P1SEL2 |= BIT5 + BIT6 + BIT7;
    P2DIR |= BIT0;
    P2OUT |=  BIT0;


    // USCI B0 SPI   
    UCB0CTL1 = UCSWRST;  //USCI 逻辑保持在复位状态  
    UCB0CTL1 |= UCSSEL_2;      // source USCI clock from SMCLK               
    UCB0CTL0 = SPI_MODE_0 | UCMSB | UCMST | UCSYNC ;  // SPI MODE 0 ,MSB优先, 3-pin,8-bit SPI master。注:#define SPI_MODE_0 (UCCKPH)           
    UCB0CTL1 &= ~UCSWRST;         // USCI 复位操作释放   
}

void MSP430_SPI_write_byte(u_char byte)
{   
    // USCI_B0  SPI Mode
    while (!(UC0IFG & UCB0TXIFG))      //UC0IFG就是IFG2
                ; // wait for previous tx to complete
        UCB0TXBUF = byte; // setting TXBUF clears the TXIFG flag
            
}

uint8 MSP430_SPI_read_byte(void)  //uint8 在其他地方已定义
{
     while (!(UC0IFG & UCB0RXIFG))      //UC0IFG就是IFG2
                ; // wait for an rx character?   
        return UCB0RXBUF; // reading clears RXIFG flag
}

相关帖子

沙发
dirtwillfly| | 2013-11-17 19:47 | 只看该作者
楼主能讲一下思路吗?

使用特权

评论回复
板凳
pengchunhua123| | 2013-11-17 20:52 | 只看该作者
请问楼主。。不用配置波特率吗??

使用特权

评论回复
地板
chenyu988| | 2013-11-18 16:36 | 只看该作者
楼主可以看下这个帖子https://bbs.21ic.com/icview-406123-1-1.html

使用特权

评论回复
5
chenyu988| | 2013-11-18 16:37 | 只看该作者
例程是基于430 launchpad G2553的

使用特权

评论回复
6
874692826|  楼主 | 2013-11-18 20:38 | 只看该作者
chenyu988 发表于 2013-11-18 16:37
例程是基于430 launchpad G2553的

我想知道不用中断和不是模拟SPI的方法

使用特权

评论回复
7
874692826|  楼主 | 2013-11-18 20:41 | 只看该作者
pengchunhua123 发表于 2013-11-17 20:52
请问楼主。。不用配置波特率吗??

spi需要配置波特率吗?之前没用过

使用特权

评论回复
8
874692826|  楼主 | 2013-11-18 20:49 | 只看该作者
dirtwillfly 发表于 2013-11-17 19:47
楼主能讲一下思路吗?

在msp430x2xx用户指南找到的:
初始化或重新配置USCI 模块
建议的USCI 初始化/重新配置的过程为:
1. 置位UCSWRST (BIS.B #UCSWRST,&UCxCTL1)
2. 使用UCSWRST=1,初始化所有的通用串行通信接口寄存器(包括UCxCTL1)
3. 配置端口
4. 通过软件清零UCSWRST 位(BIC.B #UCSWRST,&UCxCTL1)
5. 通过UCxRXIE 和/或UCxTXIE 使能中断(可选) //我这里没用中断


然后,通过查询法,等待UCB0RXIFG(或UCB0TXIFG)置位,再读出UCB0RXBUF的值(或给 UCB0TXBUF赋值),从而实现接收数据和发送数据

不知对不对?

使用特权

评论回复
9
dirtwillfly| | 2013-11-20 15:48 | 只看该作者
今天找了找资料,发现讲msp430 spi通讯的比较少。你可以参考下这个资料:http://wenku.baidu.com/view/eab40f29453610661ed9f49b.html
不过这个资料用的是中断。

使用特权

评论回复
10
i1mcu| | 2013-11-24 19:55 | 只看该作者
一般使用模拟的spi接口的。

使用特权

评论回复
11
i1mcu| | 2013-11-24 19:56 | 只看该作者
感觉配置比较麻烦的。

使用特权

评论回复
12
pengchunhua123| | 2013-11-27 09:58 | 只看该作者
874692826 发表于 2013-11-18 20:41
spi需要配置波特率吗?之前没用过

不好意思上次说错了。。不是设置波特率,而是设置分频系数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

0

粉丝