历史上的今天
今天是:2025年01月14日(星期二)
2021年01月14日 | MSP430F249—SPI主从机通信
2021-01-14 来源:eefocus
1。主机发送读取
/******************************************************************
**
** File : SPI.c | Master Send |
** Version : 1.0
** Description : SPI Master Send and Receive
** Author : LightWu
** Date : 2013-4-16
**
*******************************************************************/
#include "MSP430x24x.h"
unsigned char Data1;
void Delay(void)
{
int m;
for(m=5000;m>0;m--);
}
void SpiInit(void)
{
P3SEL |= 0x0E; // P3.3,2,1 USCI_B0 option select,注意管脚配置
P3DIR |= 0x01; // P3.0 output direction
UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI mstr, MSB 1st
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 = 0x02;
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCB0RXIE; // 打开接收中断
}
void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD; //关狗
SpiInit();
while(1)
{
//Data1 = TLC549Read();
//注意需要加延时
Delay();
P3OUT &= ~0x01; // Enable TLC549, /CS reset
UCB0TXBUF = 0x55; // Transmit first character
_BIS_SR(LPM0_bits + GIE); // CPU off, enable interrupts
}
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR (void)
{
Data1 = UCB0RXBUF; // data = 00|DATA
P3OUT |= 0x01; // Disable TLC549, /CS set
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0
}
2.从机接收发送
/******************************************************************
**
** File : SPI.c | Slave Receive and Send |
** Version : 1.0
** Description : SPI Slave Receive and Send
** Author : LightWu
** Date : 2013-4-16
**
*******************************************************************/
#include
int main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
// it is not yet in SPI mode
P3SEL |= 0x0E; // P3.3,2,1 option select
UCB0CTL1 = UCSWRST; // **Put state machine in reset**
UCB0CTL0 |= UCCKPH + UCSYNC+UCMSB; //3-pin, 8-bit SPI master
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCB0RXIE; // Enable USCI_B0 RX interrupt
_BIS_SR(LPM3_bits + GIE); // Enter LPM4, enable interrupts
}
// Echo character
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIB0RX_ISR (void)
{
while (!(IFG2 & UCB0TXIFG)); // USCI_B0 TX buffer ready?
UCB0TXBUF = UCB0RXBUF;
}
史海拾趣
|
第一次使用PIC16F73。很简单,就是在B口的第二位输出高电平就可以了。必须要调试通过的哟。 还问一个问题: 在单片机的输出管脚上如果没有接负载,使用程序输出1,就可以使用万用表量到高电平吗?… 查看全部问答> |
|
我用的是刷卡的方式加载NK.NB0. 为什么我编译生成的NK.NB0 BOOT引导无法识别和加载 串口打印信息如下。 System ready! Preparing for download... Boot Configure is found OEMPredownload... SD card is inserted, pi ...… 查看全部问答> |
|
在自己的shell程序下调用tcpmp浏览图片,在全屏模式下slide show,如果从大图片切换到小图片,上一张图片在边缘处上总是会残留,无法完全刷新。但在wince下直接调用tcpmp就是好的。不知道我的init还有哪些地方没有设置正确。请大家帮忙。 下面是我 ...… 查看全部问答> |
|
我用STM32的定时器2工作于编码器方式,可以正常得到编码器位置,但由于现在只有16位计数,位数不够,我想扩展到32位,经过试验未能解决,请帮忙提个思路。 一、先用定时器内部连接,将定时器2 的溢出送到定时器3 ...… 查看全部问答> |
|
本人是一名普通高校的学生,离毕业不到一个月了,电子信息类专业。在一个普通的城市度过了我四年的大学生活。此时,我正坐在一间即将不属于我的教室里。在此,我将写下这段时间关于专业知识学习的经历与体会,希望能给还有机会在大学继续学习的学生 ...… 查看全部问答> |




