void YJ_SPI1_CSH(unsigned char moshi,unsigned char ML)????????????????????//SPI_1初始化
{
? ? RCC->APB2PCENR|=0x1<<2;? ? ? ? ? ? ? ? ?//IO 的 PA 端口模塊時(shí)鐘使能位
? ? GPIOA->CFGLR&=~0xffff0000;
? ? GPIOA->CFGLR|=(0xb<<16|0xb<<20|0x8<<24|0xb<<28);
? ? GPIO_SetBits(GPIOA, GPIO_Pin_4);
? ? GPIO_SetBits(GPIOA, GPIO_Pin_5);
? ? GPIO_SetBits(GPIOA, GPIO_Pin_6);
? ? GPIO_SetBits(GPIOA, GPIO_Pin_7);
//? ? PA|=0Xf0;
//? ? GPIOA->OUTDR=PA;
? ? RCC->APB2PCENR|=0x1<<12;? ? ? ? ? ? ? ? //模塊時(shí)鐘開(kāi)啟
? ? SPI1->CTLR1&=~(0x1<<15);? ? ? ? ? ? ? ? //選擇雙線(xiàn)雙向模式
? ? SPI1->CTLR1|=0x1<<11;? ? ? ? ? ? ? ? ? ?//設(shè)置為16位
? ? SPI1->CTLR1&=~(0x1<<10);? ? ? ? ? ? ? ? //全雙工模式
? ? SPI1->CTLR2|=0X1<<2;? ? ? ? ? ? ? ? ? ? //SS 輸出使能
? ? SPI1->CTLR1&=~(0x1<<9);? ? ? ? ? ? ? ? ?//硬件控制 NSS 引腳
//? SPI1->CTLR1|=0x1<<9;? ? ? ? ? ? ? ? ? ? //軟件控制 NSS 引腳
//? SPI1->CTLR1|=0x1<<8;? ? ? ? ? ? ? ? ? ? //NSS 為高電平
? ? SPI1->CTLR1&=~(0x1<<7);? ? ? ? ? ? ? ? ? //先發(fā)送高低位復(fù)位
? ? SPI1->CTLR1|=ML<<7;? ? ? ? ? ? ? ? ? ? ? //設(shè)置先發(fā)高位還是地位1:先發(fā)送 LSB;0:先發(fā)送 MSB
? ? SPI1->CTLR1&=~(0x7<<3);? ? ? ? ? ? ? ? ? //波特率設(shè)置域,在通訊時(shí)不可以修改此域2分頻
? ? SPI1->CTLR1|=(0x7<<3);
? ? SPI1->CTLR1|=1<<2;? ? ? ? ? ? ? ? ? ? ? ?//配置為主設(shè)備
? ? SPI1->CTLR1&=~0x3;? ? ? ? ? ? ? ? ? ? ? ?//
? ? SPI1->CTLR1|=moshi&0x3;? ? ? ? ? ? ? ? ? //
? ? SPI1->CTLR2|=0x1<<7;? ? ? ? ? ? ? ? ? ? //發(fā)送緩沖區(qū)空中斷使能位
? ? SPI1->CTLR1|=1<<6;? ? ? ? ? ? ? ? ? ? ? ?//啟用 SPI
?//? ?GPIO_ResetBits(GPIOA, GPIO_Pin_4);
? ? //PA&=~0X10;
? ? //GPIOA->OUTDR=PA;
? ? *(volatile unsigned int *)0xE000E804&=~(0xff<<8);? ?//復(fù)位
? ? *(volatile unsigned int *)0xE000E804|=0xc0<<8;? ? ? //優(yōu)先級(jí)配置位中高 2 位為搶占位,4 級(jí)中斷嵌套;
? ? *(volatile unsigned int *)0xE000E448&=~(0xff<<16);? ?//嵌套0
? ? *(volatile unsigned int *)0xE000E104=0x1<<19;? ?//使能中斷
}
void SPI1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));????????????????//SP1中斷函數(shù)
void SPI1_IRQHandler(void)
{
? ? if(SPI1_TXE)
? ? {
? ? ? ? js++;
? ? ? ? SPI1_DR=0x123;
? ? }
}
用邏輯分析儀發(fā)現(xiàn)NSS總是會(huì)有毛刺,同時(shí)MOSI也會(huì)有,導(dǎo)致數(shù)據(jù)不正確。(用軟件控制NSS和硬件控制NSS都會(huì)有毛刺)