在线时间84 小时
UID3102756
注册时间2015-3-12
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 1234
- 最后登录
- 2015-9-13
|
单片机型号是:9S12YH64MLL,关于SPI通讯,我的程序如下:
//SPI初始化
void SPI_init(void) {
PTSRR = 0x20; //配置PV口为SPI接口
//主机,SCK、MOSI、SS配置为输出,MISO为输入
DDRV_DDRV0 = 0; //miso为输入
DDRV |= DDRV_DDRV1_MASK|DDRV_DDRV2_MASK; //mosi、sck为输出
PTV |= PTV_PTV1_MASK|PTV_PTV2_MASK;
DDRU |= DDRU_DDRU7_MASK|DDRU_DDRU7_MASK; //ss为输出
PTU_PTU7 = 0;
SPICR1 = 0x5E; //主机模式
SPICR2 = 0x08; //SS管脚没有利用,8位数据
SPIBR = 0x03; //波特率500Kb/s
}
byte spi_send(byte x) {
while(!SPISR_SPTEF);
SPIDRL=x;
return SPIDRL;
}
byte spi_receive (void) {
while(!SPISR_SPIF);
return SPIDRL;
}
void main(void) {
byte n = 0,m = 0;
CPMU_PEE_8MHz(); // configure clock module
Configure_Ports(); // setup IO ports
Init_Timer1(); // init TIM1 as free-running
ensci(); // init SCI
SPI_init();
EnableInterrupts;
for(;;) {
n = spi_send(0x95);
putchar(SPIDRL);
putchar(n);
Delay(5);
}
}
问题是:我调用SPI发送数据的函数以后,为什么数据没有被传递到SPI的数据寄存器SPIDRL中?(通过串口监控发现一直是0x00,正确的应该是0x95),这是什么原因呢?我的程序中有错误吗?我用示波器观察到,MOSI管脚上是有数据的,而且数据也正确,但是读数据寄存器怎么读不到数据呢?示波器波形如下:
|
评分
-
查看全部评分
|