my code:
void SPI1_Init(void)
{
//uint8_t temp;
SPI1CR1=0x04;
(void)SPI1SR;
(void)SPI1DR;
/*SPPR2~SPPR0=011=3,SPR2~SPR0=010=2 ,最终波特率为 Fbus /(3+1)*(2^(2+1)),假设总线频率为32M。那么算下来SCLK=1M */
SPI1BR=0x32;
SPI1CR2=0x40; /*D7=0 D6=XFRW=1数据传输16位,=0是8位 D5=0 D4=MODFEN=0*/
/*SPIE=0 禁止中断,SPE=1 使能SPI模块,SPTIE=0 发送中断禁止,MSTR=1主机工作模式,CPOL=1 SCLK空闲为高电平,CPHA=1 时钟第二个沿采集数据,SSOE=0 片选脚不用,LSBFE=0 MSB先传*/
SPI1CR1=0x5e;
}
uint8_t SPI1_Send_Data(uint16_t Send_Data)
{
uint16_t i;
while(!(SPI1SR_SPTEF));/*wait empty,then load new data*/
SPI1DR= Send_Data;
return 0;
}
Hello,
You must clear the SPIF after a write to SPIDR.
The SPI transmitter empty flag SPTEF in the SPISR register indicates when the SPI data register is ready to accept new data. Received data in the SPIDR is valid when SPIF is set.
This is the sequence:
1. Read of SPISR with SPTEF = 1
2. Write to SPIDR (this puts data into the transmit data register)
3. When a transfer is complete and SPIF is cleared, received data is moved into the receive data register.
The data register acts as the SPI receive data register for reads and as the SPI transmit data register for writes.
Also see Table 21-10. SPTEF Interrupt Flag Clearing Sequence in the MC9S12XEP100 reference manual:
http://cache.freescale.com/files/microcontrollers/doc/data_sheet/MC9S12XEP100RMV1.pdf
(You must read SPISR register with SPTEF == 1 and then write to data register SPIDRL)
The code for example:
************************************************************
void main(void) {
/* put your own code here */
SPI0_Init(); //SPI0 Init
for(;;) {
while(!(SPISR_SPTEF)); // Tx buffer empty?
SPIDR = command; // All Status Command
(void)SPISR; // clearing SPIF flag
(void)SPIDR; // Dummy read
while(!(SPISR_SPIF)); // wait for transfer done
while(!(SPISR_SPTEF)); //Tx buffer empty?
SPIDR = 0x0000; //Dummy value
(void)SPISR; // clearing SPIF flag
(void)SPIDR; // Dummy read
while(!(SPISR_SPIF)); //wait for data
result = SPIDR;
} /* loop forever */
/* please make sure that you never leave main */
}
**************************************************************
Regards,
iggi