金牌会员
- 积分
- 1600
- 威望
- 835
- 贡献
- 405
- 兑换币
- 246
- 注册时间
- 2012-1-5
- 在线时间
- 180 小时
|
网上有GPIO口模拟SPI控制NRF24L01的,但是我用K60内部SPI通信时,读写不了NRF24L01的寄存器啊!求大神解释。
void spi2_init (void)
{
//使能SPI2时钟
SIM_SCGC3 |= SIM_SCGC3_SPI2_MASK;
//spi2PCS0,SCK,SIN,SOUT端口初始化
PORTB_PCR20 |= PORT_PCR_MUX(2) ;
PORTB_PCR21 |= PORT_PCR_MUX(2) ;
PORTB_PCR22 |= PORT_PCR_MUX(2) ;
PORTB_PCR23 |= PORT_PCR_MUX(2) ;
//SPI2主机模式,传输停止状态
SPI2_MCR = (SPI_MCR_MSTR_MASK | SPI_MCR_HALT_MASK);
//清除接受队列,发送队列,片选信号低电平有效
SPI2_MCR |= SPI_MCR_CLR_RXF_MASK ;
SPI2_MCR |= SPI_MCR_CLR_TXF_MASK ;
SPI2_MCR |= SPI_MCR_ROOE_MASK ;
SPI2_MCR |= SPI_MCR_PCSIS_MASK ;
//每帧8比特,波特率为5M,双重波特率
SPI2_CTAR0 = SPI_CTAR_FMSZ(7) ;
SPI2_CTAR0 |= SPI_CTAR_PBR(2) ;
SPI2_CTAR0 |= SPI_CTAR_BR(3) ;
SPI2_CTAR0 |= SPI_CTAR_DBR_MASK ;
//清除队列尾标志,传输队列下溢标志,传输队列满标志,接收队列溢出、损耗标志
SPI2_SR = (SPI_SR_EOQF_MASK
| SPI_SR_TFUF_MASK
| SPI_SR_TFFF_MASK
| SPI_SR_RFOF_MASK
| SPI_SR_RFDF_MASK);
SPI2_MCR &= ~SPI_MCR_MDIS_MASK;//使能DSPI时钟
SPI2_MCR &= ~SPI_MCR_HALT_MASK;//启动SPI模块
}
uint8 SPI_RW(uint8 value)
{
uint8 rvalue;
SPI2_SR = SPI2_SR;
SPI1_PUSHR = SPI_PUSHR_TXDATA(value);
SPI2_PUSHR = (SPI_PUSHR_PCS(1)
| SPI_PUSHR_TXDATA(*va));
while(!(SPI2_SR&SPI_SR_RFDF_MASK));
rvalue=SPI2_POPR;
}
|
|