查看: 635|回复: 1
打印 上一主题 下一主题

SPI通信,读取从机寄存器的数据

[复制链接] qrcode

35

主题

38

帖子

115

积分

注册会员

Rank: 2

积分
115
楼主
跳转到指定楼层
发表于 2014-8-27 10:36 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要写一个430跟MAX35101的SPI通信,读取MAX35101的寄存器值,怎么写代码?有没有相关例程?谢谢
回复

使用道具 举报

0

主题

77

帖子

4

积分

新手上路

Rank: 1

积分
4
沙发
发表于 2014-9-6 01:49 PM | 只看该作者

430的SPI还是很简单的,首先你430的SPI程序调通了没有。可以通过回环方式测试下SPI工作是否正常。至于例程,网上好多的。

我这里给你一个初始化的例子吧

void Usart0SpiInit(void)
{
#if USART0_SPI_MODE == eSpiModeMaster
uint16_t u0br = 0;                               // 主机模式根据波特率计算时钟分频系数

#if USART0_SPI_CLKSRC == eSpiClkSrcSMclk
u0br = SMCLK_Hz / USART0_SPI_BAUD_RATE;          // SMCLK
#elif USART0_SPI_CLKSRC == eSpiClkSrcAclk
u0br = ACLK_Hz / USART0_SPI_BAUD_RATE;           // ACLK
#else
u0br = USART0_SPI_UCLK_Hz / USART0_SPI_BAUD_RATE;// EXUCLK?
#endif

if(u0br < 2)                                     // 当分频系数小于 2 时,会发生意想不到的错误(官方文档)
u0br = 2;                                    // 分频系数最小为 2
#endif

P1SEL  |= BIT5 | BIT6 | BIT7;                    // 使能 SPI 引脚功能
P1SEL2 |= BIT5 | BIT6 | BIT7;
#if USART0_SPI_MODE == eSpiModeSlave
P2SEL  |= BIT0;                                  // 从机模式时,片选脚也使能
P2SEL2 |= BIT0;
#endif

U0CTL  = SWRST;                                  // 复位 USART0
#if USART0_SPI_MODE == eSpiModeMaster
U0CTL |= SYNC | MM | USART0_SPI_CHAR_LENGTH | USART0_SPI_LOOPBACK;
U0TCTL = USART0_SPI_CKPH | USART0_SPI_CKPL | USART0_SPI_CLKSRC | STC;
U0BR0  = u0br & 0xFF;
U0BR1  = (u0br >> 8) & 0xFF;
#else
U0CTL |= SYNC | USART0_SPI_CHAR_LENGTH;
U0TCTL = USART0_SPI_CKPH | USART0_SPI_CKPL | USART0_SPI_STE_PIN;
#endif
U0RCTL = 0;
U0MCTL = 0;
ME1   |= USPIE0;                                 // 使能 USART0
U0CTL &= ~SWRST;                                 // 清楚复位标志

#if USART0_SPI_MODE == eSpiModeSlave
IE1 |= URXIE0;                                   // 从机模式开启中断
U0TXBUF = USART0_SPI_ACK_INVALID;                // 准备好返回的数据
#endif
}

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表