msp430 与nrf24l01硬件接口和msp430IO设置的问题
有用过430单片机编写过nrf24l01的程序的不?430IO口应该怎么设置,那个口设置为输入,哪个为输出?(用软件模拟SPI)我的程序代码如下,不知道对不对,我检测到n...
有用过 430单片机编写过nrf24l01的程序的不?430 IO口应该怎么设置,那个口设置为输入,哪个为输出?(用软件模拟SPI)
我的程序代码如下,不知道对不对,我检测到nrf24l01没正常工作。
//==============================================================================
#define RF24L01_CE_0 P1OUT &=~BIT4
#define RF24L01_CE_1 P1OUT |= BIT4
//=============================RF24L01_CSN端口==================================
#define RF24L01_CSN_0 P1OUT &=~BIT5
#define RF24L01_CSN_1 P1OUT |= BIT5
//=============================RF24L01_SCK======================================
#define RF24L01_SCK_0 P1OUT &=~BIT3
#define RF24L01_SCK_1 P1OUT |= BIT3
//=============================MISO端口=========================================
#define RF24L01_MISO_0 P1OUT&=~BIT2
#define RF24L01_MISO_1 P1OUT |= BIT2
//============================= RF24L01_MOSI端口================================
#define RF24L01_MOSI_0 P1OUT &=~BIT1
#define RF24L01_MOSI_1 P1OUT |= BIT1
//==========================IRQ状态============================================
#define RF24L01_IRQ_0 P1OUT&=~BIT6
#define RF24L01_IRQ_1 P1OUT|= BIT6
//===========================RF24L01端口设置==========================================
void RF24L01_IO_set(void)
{
P1DIR |= BIT2; P1DIR |= BIT1; P1DIR |= BIT4; P1SEL=0x00;
P1DIR |= BIT6; P1DIR |= BIT3; P1DIR |= BIT5; // P1IE&=~BIT1;
// P1IE&=~BIT6;
} 展开
我的程序代码如下,不知道对不对,我检测到nrf24l01没正常工作。
//==============================================================================
#define RF24L01_CE_0 P1OUT &=~BIT4
#define RF24L01_CE_1 P1OUT |= BIT4
//=============================RF24L01_CSN端口==================================
#define RF24L01_CSN_0 P1OUT &=~BIT5
#define RF24L01_CSN_1 P1OUT |= BIT5
//=============================RF24L01_SCK======================================
#define RF24L01_SCK_0 P1OUT &=~BIT3
#define RF24L01_SCK_1 P1OUT |= BIT3
//=============================MISO端口=========================================
#define RF24L01_MISO_0 P1OUT&=~BIT2
#define RF24L01_MISO_1 P1OUT |= BIT2
//============================= RF24L01_MOSI端口================================
#define RF24L01_MOSI_0 P1OUT &=~BIT1
#define RF24L01_MOSI_1 P1OUT |= BIT1
//==========================IRQ状态============================================
#define RF24L01_IRQ_0 P1OUT&=~BIT6
#define RF24L01_IRQ_1 P1OUT|= BIT6
//===========================RF24L01端口设置==========================================
void RF24L01_IO_set(void)
{
P1DIR |= BIT2; P1DIR |= BIT1; P1DIR |= BIT4; P1SEL=0x00;
P1DIR |= BIT6; P1DIR |= BIT3; P1DIR |= BIT5; // P1IE&=~BIT1;
// P1IE&=~BIT6;
} 展开
展开全部
CE是控制收发状态的,MSP430上应该为输出方向。
CSN是SPI总线使能,是MCU控制24L01的接口状态的,应该用输出,不过一般如果没有多片共用SPI总线的话,完全可以不用控制,直接把CSN接死,就是24L01的SPI总线始终是使能的,这样做并不会增加24L01上的功耗,因为后边是用软件控制休眠的,除非还有别的SPI设备或IO复用并联在这组SPI端口上。所以MSP430上也应该为输出方向。
SCK是串行时钟,MSP430作主机时要提供时钟给24L01,所以也是输出方向。
MISO是主入从出,MSP430是主,24L01是从,所以MSP430要接收,是输入方向
MOSI相反,是主出从入,因此MSP430是输出方向
IRQ是中断,24L01在有状态改变(需要软件设定什么状态引起中断)时主动叫MCU用的,MSP430要使用一个IO来接收这个中断状态,所以要把对应的IO设置为输入方向,并且如果使用的不是查询式,而是真正的中断式操作时,应该把这个IO设置为中断使能,注意设置中断时应该先设置中断方向等参数,最后再开启,防止开启后的修改导致意外进入中断。
总结一下,除了MISO和IRQ以外,全部都是输出方向,其中IRQ除了设置为输入,可能还需要启用IO中断。
CSN是SPI总线使能,是MCU控制24L01的接口状态的,应该用输出,不过一般如果没有多片共用SPI总线的话,完全可以不用控制,直接把CSN接死,就是24L01的SPI总线始终是使能的,这样做并不会增加24L01上的功耗,因为后边是用软件控制休眠的,除非还有别的SPI设备或IO复用并联在这组SPI端口上。所以MSP430上也应该为输出方向。
SCK是串行时钟,MSP430作主机时要提供时钟给24L01,所以也是输出方向。
MISO是主入从出,MSP430是主,24L01是从,所以MSP430要接收,是输入方向
MOSI相反,是主出从入,因此MSP430是输出方向
IRQ是中断,24L01在有状态改变(需要软件设定什么状态引起中断)时主动叫MCU用的,MSP430要使用一个IO来接收这个中断状态,所以要把对应的IO设置为输入方向,并且如果使用的不是查询式,而是真正的中断式操作时,应该把这个IO设置为中断使能,注意设置中断时应该先设置中断方向等参数,最后再开启,防止开启后的修改导致意外进入中断。
总结一下,除了MISO和IRQ以外,全部都是输出方向,其中IRQ除了设置为输入,可能还需要启用IO中断。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询