/************************************************************************* 
* 名称: SPI_MasterInit                                                                                                           
* 功能: SPI主机模式初始化                                                                                                                
* 参数: 无 
* 返回: 无                                                                                                            
*************************************************************************/ 
void SPI_MasterInit(void) 
{ 
 
SPCTL  = 0xce; //SSIG  SPEN  DORD  MSTR  CPOL  CPHA  SPR1  SPR0   
SPSTAT = 0XC0; //SPDAT.7和SPDAT.6写11,可以将中断标志清零。注意是写1才清零 
SPDAT  = 0x00; // 数据寄存器清空 
} 
/************************************************************************* 
* 名称: void SPI_MasterTransmit(uint8_t cData)                                                                                                           
* 功能: SPI主机模式传送数据                                                                                                                
* 参数: cData 要传输的字节数据                                                                                                                
* 返回: SPI接收值                                                                                                            
*************************************************************************/ 
unsigned char SPI_MasterTransmit(unsigned char cData) 
{ 
SPSTAT=0xc0;           // 每次传输完成都要清除标志位,因为传完一个字节就置1了 
SPDAT=cData; 
while(!(SPSTAT&0x80)); // 重要,判断标识位,等待SPI传送结束才能开始下一步 
return SPDAT; 
} 
/************************************************************************* 
* 名称: Tlc2543_GetAdc 
* 功能: 获取指定通道前一次转换结果                                                                                                                
* 参数: cChannel通道                                                                                                                
* 返回: 12位ADC 
*************************************************************************/ 
unsigned int Tlc2543_GetAdc(unsigned char cChannel) 
{ 
unsigned char tmp; 
unsigned int dAdc; 
cChannel = (cChannel << 4) | 0x0C; //16(伪)位精度MSB在先 
CS=0;  
dAdc = SPI_MasterTransmit(cChannel); //高位字节   
tmp = SPI_MasterTransmit(cChannel); //地位字节 
CS=1; 
dAdc <<= 8; 
dAdc |= tmp; 
dAdc >>= 4; //去12位有效位 
return dAdc; 
} 
我在主函数中进行读取AD通道值,为什么会是在“while(!(SPSTAT&0x80));”? 
请教各位这是为什么?会死在等待?我按照资料上的要求写的程序?这是怎么回事? |   
     
  
 |