关于376T初始化问题: 采用SPI接法与2812的SPI口相连,376T的RSTI(2脚)接I/O口(高电平,与接VCC类似,未加滤波电容)
//376片选信号高低控制 #define CH376_SPI_SCS_High {GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;} #define CH376_SPI_SCS_Low {GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;}
void InitGpio(void) { EALLOW; //GPIOF配置为外设功能 GpioMuxRegs.GPFMUX.bit.SPISIMOA_GPIOF0=0x1; GpioMuxRegs.GPFMUX.bit.SPISOMIA_GPIOF1=0x1; GpioMuxRegs.GPFMUX.bit.SPICLKA_GPIOF2=0x1; GpioMuxRegs.GPFMUX.bit.SPISTEA_GPIOF3=0x1; GpioMuxRegs.GPFMUX.bit.XF_GPIOF14=0x0;// I/O
GpioMuxRegs.GPFDIR.bit.GPIOF0=0x1;//output pin GpioMuxRegs.GPFDIR.bit.GPIOF1=0x0;//input pin GpioMuxRegs.GPFDIR.bit.GPIOF2=0x1;//output pin GpioMuxRegs.GPFDIR.bit.GPIOF3=0x1;//output pin GpioMuxRegs.GPFDIR.bit.GPIOF14=0x1;//out EDIS; } void InitSpi(void) { // Initialize SPI-A: SpiaRegs.SPICCR.all = 0x47;//0X1F SpiaRegs.SPICTL.all = 0x0F;//07 SpiaRegs.SPIBRR = 0x0005; //25Mhz (30M晶振,HISPCP=0X2;LOSPCP=0X0; SPI波特率=150Mhz/(5+1)=25Mhz) // SpiaRegs.SPIPRI.all = 0x10; SpiaRegs.SPICCR.all = 0xC7; PieCtrl.PIEIER6.bit.INTx1 = 1; PieCtrl.PIEIER6.bit.INTx2 = 1; }
void CH376_PORT_INIT(void) { InitGpio(); InitSpi(); CH376_SPI_SCS_High; } unsigned char Spi376Exchange(unsigned char data) { if(Spi_TxReady() == 1) { SpiaRegs.SPITXBUF = data; } if(Spi_RxReady()==1) { ReturnValue = SpiaRegs.SPIRXBUF; } return(ReturnValue); } void xEndCH376Cmd(void) //禁止ch376片选,SCS为高 { CH376_SPI_SCS_High; } void xWriteCH376Cmd(unsigned char mCmd)//向CH376写命令 { //为防止之前未通过xEndCH376Cmd禁止SPI片选 CH376_SPI_SCS_High; //SCS_High mDelayus(150); CH376_SPI_SCS_Low; //SCS_Low Spi376Exchange(mCmd); mDelayus(50); } void xWriteCH376Data(unsigned char mData)//向CH376写数据 { Spi376Exchange(mData); mDelayus(40);//确保读写周期大于0.6uS } unsigned char xReadCH376Data(void) //从CH376读数据 { mDelayus(40); // 确保读写周期大于0.6uS return(Spi376Exchange(0xFF)); } unsigned char mInitCH376Host(void)//初始化376 { unsigned int res; // CH376_PORT_INIT();//接口硬件初始化 xWriteCH376Cmd(CMD11_CHECK_EXIST);//测试控制器与硬件之间的接口 xWriteCH376Data(0x65); res = xReadCH376Data(); xEndCH376Cmd(); if(res!=0x9A) return(ERR_USB_UNKNOWN);//通讯接口不正常
xWriteCH376Cmd(CMD11_SET_USB_MODE);//设置工作模式,SD卡模式 xWriteCH376Data(0x03); mDelayus(40); res = xReadCH376Data(); xEndCH376Cmd();
xWriteCH376Data(CMD20_SET_SDO_INT); xWriteCH376Data(0x16); xWriteCH376Data(0x90);//SD0引脚在SCS片选无效时兼做中断请求输出 xEndCH376Cmd();
if(res==CMD_RET_SUCCESS) return(USB_INT_SUCCESS);//通讯接口不正常 else return(ERR_USB_UNKNOWN); } void main(void) { InitSysCtrl(); InitPieCtrl(); InitPieVectTable(); mDelayms(150); s = mInitCH376Host();//CH376初始化,正常返回14=20,否则返回FA=250 if(Spi_TxReady() == 1) { SpiaRegs.SPITXBUF = s;} if(Spi_RxReady() == 1) { k = SpiaRegs.SPIRXBUF;} } 为什么测量引脚时发现SPI四个引脚全是高电平。返回值s = FA,说明初始化未成功。这是什么原因呢?