#define SCS PCout(0)
#define SCL PCout(1)
#define SDA PCout(2)
#define sdo PCin(3)
void LCD_Init(void)
{
u16 id;
RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
RCC->APB2ENR|=1<<0; //开启辅助时钟
JTAG_Set(SWD_ENABLE); //开启SWD
GPIOC->CRH&=0XFFFFFF00;
GPIOC->CRH|=0X00000033;
GPIOC->CRL&=0X000F0000;
GPIOC->CRL|=0X33308333;
GPIOC->ODR|=0X03eF; //0,1,2
//PORTB 推挽输出
GPIOB->CRH=0X33333333;
GPIOB->CRL=0X33333333;
GPIOB->ODR=0XFFFF;
delay_ms(50); // delay 50 ms
DeviceCode = LCD_ReadReg(0x00B0);
}
void spi_write_command(u8 num)
{
SCS=0;
u8 count=0;
SDA=0;
SCL=0;
SCL=1;
for(count=0;count<8;count++)
{
if(num&0x80)SDA=1;
else SDA=0;
num<<=1;
SCL=0;//
SCL=1;
}
SCS=1;
}
u16 LCD_ReadReg(u8 CMD)
{
u8 count=0;
u16 Num=0;
SCL=0;//
SCS=0; //
spi_write_command(CMD);//发送命令字
delay_us(6);//ADS7846的转换时间最长为6us
SCL=1;//给1个时钟,清除BUSY
SCL=0;
for(count=0;count<16;count++)
{
Num<<=1;
SCL=0;//下降沿有效
SCL=1;
if(sdo)Num++;
}
SCS=1;
return(Num);
}
读的全是0XFF;
|