dsp28335杂记2
生活随笔
收集整理的這篇文章主要介紹了
dsp28335杂记2
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- adc多通道配置
- SCI-A轉(zhuǎn)rs232(MAX232)收發(fā)配置
- SPI收發(fā)配置
- SCI-B 轉(zhuǎn) rs485(SP3485)收發(fā)配置
- SPI收發(fā)配置+中斷+loopback+看看就好,嘿嘿
- 模擬I2C驅(qū)動(dòng)
- FLASH燒寫(xiě)配置
- SD卡配置(SD 卡 2.0 協(xié)議)
adc多通道配置
#define ADC_MODCLK 3 #define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC clocksextern Uint16 SampleTable[6];//在main里面是Uint16 SampleTable[6]={0};void ADC_Init(void) {// Specific clock setting for this example:EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADCEDIS;// Specific clock setting for this example:EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)EDIS;InitAdc(); // For this example, init the ADC// Specific ADC setup for this example:AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // ADC采樣時(shí)間選擇AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; // ADC內(nèi)核分頻AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1級(jí)聯(lián)工作方式AdcRegs.ADCTRL3.bit.SMODE_SEL= 0; // 順序采樣AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // 連續(xù)采樣AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1 ; // 完成排序后,排序器指針回到最初狀態(tài)AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x2; // 最大通道個(gè)數(shù)AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // A0 為采樣通道AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // A1 為采樣通道AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // A2 為采樣通道// Start SEQ1AdcRegs.ADCTRL2.all = 0x2000; //軟件觸發(fā)、PWM 觸發(fā)等,使用軟件觸發(fā)//AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; //允許向CPU發(fā)出中斷請(qǐng)求 }void Read_ADCValue(void) {while (AdcRegs.ADCST.bit.INT_SEQ1== 0);//等待 ADC 轉(zhuǎn)換完成,然后清除狀態(tài)標(biāo)志AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;SampleTable[0] = AdcRegs.ADCRESULT0 >> 4;SampleTable[1] = AdcRegs.ADCRESULT1 >> 4;SampleTable[2] = AdcRegs.ADCRESULT2 >> 4; }SCI-A轉(zhuǎn)rs232(MAX232)收發(fā)配置
void UARTa_Init(Uint32 baud) {unsigned char scihbaud=0;unsigned char scilbaud=0;Uint16 scibaud=0;scibaud=37500000/(8*baud)-1;scihbaud=scibaud>>8;scilbaud=scibaud&0xff;EALLOW;SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-AEDIS;InitSciaGpio();//Initalize the SCI FIFOSciaRegs.SCIFFTX.all=0xE040;SciaRegs.SCIFFRX.all=0x204f;SciaRegs.SCIFFCT.all=0x0;// Note: Clocks were turned on to the SCIA peripheral// in the InitSysCtrl() functionSciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback// No parity,8 char bits,// async mode, idle-line protocolSciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKESciaRegs.SCICTL2.all =0x0003;SciaRegs.SCICTL2.bit.TXINTENA =1;SciaRegs.SCICTL2.bit.RXBKINTENA =1;SciaRegs.SCIHBAUD =scihbaud; // 9600 baud @LSPCLK = 37.5MHz.SciaRegs.SCILBAUD =scilbaud; // SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop backSciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset }// Transmit a character from the SCI' void UARTa_SendByte(int a) {while (SciaRegs.SCIFFTX.bit.TXFFST != 0);SciaRegs.SCITXBUF=a; }void UARTa_SendString(char * msg) {int i=0;while(msg[i] != '\0'){UARTa_SendByte(msg[i]);i++;} } Uint16 UARTa_ReciveByte(void) {while(SciaRegs.SCIFFRX.bit.RXFFST !=1);// wait for XRDY =1 for empty statereturn SciaRegs.SCIRXBUF.all;// Get character }char* UARTa_ReciveString(void) {char buff[128] = {0};int i=0;while((buff[i] != '\0'){buff[i]=SciaRegs.SCIRXBUF.all;i++;}buff[i] = '\0';return buff; }SPI收發(fā)配置
void SPIA_Init(void) {EALLOW;SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-AEDIS;//InitSpiaGpio();EALLOW;GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;// Enable pull-up on GPIO54 (SPISIMOA)GpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;// Enable pull-up on GPIO55 (SPISOMIA)GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0;// Enable pull-up on GPIO56 (SPICLKA)GpioCtrlRegs.GPBPUD.bit.GPIO57 = 0;GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;// Configure GPIO54 as SPISIMOAGpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;// Configure GPIO55 as SPISOMIAGpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;// Configure GPIO56 as SPICLKAGpioCtrlRegs.GPBMUX2.bit.GPIO57 = 1;// Configure GPIO57 as SPISTEAEDIS;// Initialize SPI FIFO registersSpiaRegs.SPIFFTX.all=0xE040;SpiaRegs.SPIFFRX.all=0x204f;SpiaRegs.SPIFFCT.all=0x0;SpiaRegs.SPICCR.all =0x000F;// Reset on, rising edge, 16-bit char bitsSpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,// enable talk, and SPI int disabled.SpiaRegs.SPIBRR =0x007F;SpiaRegs.SPICCR.all =0x00DF;// Relinquish SPI from ResetSpiaRegs.SPIPRI.bit.FREE = 1;// Set so breakpoints don't disturb xmission }Uint16 SPIA_SendReciveData(Uint16 dat) {// Transmit dataSpiaRegs.SPITXBUF=dat;// Wait until data is receivedwhile(SpiaRegs.SPIFFRX.bit.RXFFST !=1);return SpiaRegs.SPIRXBUF; }SCI-B 轉(zhuǎn) rs485(SP3485)收發(fā)配置
#define RS485_DIR_SETH (GpioDataRegs.GPBSET.bit.GPIO61=1) #define RS485_DIR_SETL (GpioDataRegs.GPBCLEAR.bit.GPIO61=1)void RS485_Init(Uint32 baud) {unsigned char scihbaud=0;unsigned char scilbaud=0;Uint16 scibaud=0;scibaud=37500000/(8*baud)-1;scihbaud=scibaud>>8;scilbaud=scibaud&0xff;EALLOW;SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-BEDIS;InitSciGpio();EALLOW;//RS485_EN端口配置GpioCtrlRegs.GPBMUX2.bit.GPIO61=0;GpioCtrlRegs.GPBDIR.bit.GPIO61=1;GpioCtrlRegs.GPBPUD.bit.GPIO61=0;GpioDataRegs.GPBSET.bit.GPIO61=1;EDIS;// Note: Clocks were turned on to the SCIA peripheral// in the InitSysCtrl() functionScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback// No parity,8 char bits,// async mode, idle-line protocolScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,// Disable RX ERR, SLEEP, TXWAKEScibRegs.SCICTL2.all =0x0003;ScibRegs.SCICTL2.bit.TXINTENA =1;ScibRegs.SCICTL2.bit.RXBKINTENA =1;ScibRegs.SCIHBAUD =scihbaud; // 9600 baud @LSPCLK = 37.5MHz.ScibRegs.SCILBAUD =scilbaud;ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset}// Transmit a character from the SCI' void RS485_SendByte(int a) {while (ScibRegs.SCICTL2.bit.TXEMPTY == 0);ScibRegs.SCITXBUF=a; }void RS485_SendString(char * msg) {int i=0;while(msg[i] != '\0'){RS485_SendByte(msg[i]);i++;} }SPI收發(fā)配置+中斷+loopback+看看就好,嘿嘿
Uint16 sdata[8]; // Send data buffer Uint16 rdata[8]; // Receive data buffer Uint16 errcounter; Uint16 rdata_point; void spi_error(void); interrupt void spiTxFifoIsr(void); interrupt void spiRxFifoIsr(void); void SPIA_INT_Init(void) {EALLOW;SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-AEDIS;InitSpiaGpio();EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.SPIRXINTA = &spiRxFifoIsr;PieVectTable.SPITXINTA = &spiTxFifoIsr;EDIS; // This is needed to disable write to EALLOW protected registers// Initialize SPI FIFO registersSpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPISpiaRegs.SPICCR.all=0x001F; //16-bit character, Loopback modeSpiaRegs.SPICTL.all=0x0017; //Interrupt enabled, Master/Slave XMIT enabledSpiaRegs.SPISTS.all=0x0000;SpiaRegs.SPIBRR=0x0063; // Baud rateSpiaRegs.SPIFFTX.all=0xC028; // Enable FIFO's, set TX FIFO level to 8SpiaRegs.SPIFFRX.all=0x0028; // Set RX FIFO level to 8SpiaRegs.SPIFFCT.all=0x00;SpiaRegs.SPIPRI.all=0x0010;SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPISpiaRegs.SPIFFTX.bit.TXFIFO=1;SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;// Enable interrupts required for this examplePieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE blockPieCtrlRegs.PIEIER6.bit.INTx1=1; // Enable PIE Group 6, INT 1PieCtrlRegs.PIEIER6.bit.INTx2=1; // Enable PIE Group 6, INT 2IER=0x20; // Enable CPU INT6EINT; // Enable Global Interrupts }interrupt void spiTxFifoIsr(void) {Uint16 i;for(i=0;i<8;i++){SpiaRegs.SPITXBUF=sdata[i]; // Send data}for(i=0;i<8;i++) // Increment data for next cycle{sdata[i]++;}SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1; // Clear Interrupt flagPieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ACK }interrupt void spiRxFifoIsr(void) {Uint16 i;for(i=0;i<8;i++){rdata[i]=SpiaRegs.SPIRXBUF; // Read data}for(i=0;i<8;i++) // Check received data{if(rdata[i] != rdata_point+i) spi_error(); //運(yùn)行一段時(shí)間后,在此處設(shè)置斷點(diǎn)}rdata_point++;SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; // Clear Overflow flagSpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flagPieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ack } void spi_error(void) {errcounter++;asm(" ESTOP0"); //Test failed!! Stop!for (;;); }模擬I2C驅(qū)動(dòng)
#define IIC_SCL_SETH (GpioDataRegs.GPBSET.bit.GPIO33=1) #define IIC_SCL_SETL (GpioDataRegs.GPBCLEAR.bit.GPIO33=1)#define IIC_SDA_SETH (GpioDataRegs.GPBSET.bit.GPIO32=1) #define IIC_SDA_SETL (GpioDataRegs.GPBCLEAR.bit.GPIO32=1)#define READ_SDA (GpioDataRegs.GPBDAT.bit.GPIO32)void IICA_Init(void) {EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 開(kāi)啟GPIO時(shí)鐘GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; //上拉GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; // 輸出端口GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; // IO口GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // 不同步GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; //上拉GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1; // 輸出端口GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; // IO口GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // 不同步EDIS; } void SDA_OUT(void) {EALLOW;GpioCtrlRegs.GPBDIR.bit.GPIO32=1; //Output. SDAEDIS; } void SDA_IN(void) {EALLOW;GpioCtrlRegs.GPBDIR.bit.GPIO32=0; //Input, SDAEDIS; }//===starting...... //產(chǎn)生IIC起始信號(hào) void IIC_Start(void) {SDA_OUT(); //sda線輸出IIC_SDA_SETH;IIC_SCL_SETH;DELAY_US(5);IIC_SDA_SETL;//START:when CLK is high,DATA change form high to lowDELAY_US(6);IIC_SCL_SETL;//鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) }//產(chǎn)生IIC停止信號(hào) void IIC_Stop(void) {SDA_OUT();//sda線輸出IIC_SCL_SETL;IIC_SDA_SETL;//STOP:when CLK is high DATA change form low to highIIC_SCL_SETH;DELAY_US(6);IIC_SDA_SETH;//發(fā)送I2C總線結(jié)束信號(hào)DELAY_US(6); }//等待應(yīng)答信號(hào)到來(lái) unsigned char IIC_Wait_Ack(void) {unsigned char tempTime=0;IIC_SDA_SETH;DELAY_US(1);SDA_IN(); //SDA設(shè)置為輸入IIC_SCL_SETH;DELAY_US(1);while(READ_SDA){tempTime++;if(tempTime>250){IIC_Stop();return 1;}}IIC_SCL_SETL;//時(shí)鐘輸出0return 0; }//產(chǎn)生ACK應(yīng)答 void IIC_Ack(void) {IIC_SCL_SETL;SDA_OUT();IIC_SDA_SETL;DELAY_US(2);IIC_SCL_SETH;DELAY_US(5);IIC_SCL_SETL; }//產(chǎn)生NACK非應(yīng)答 void IIC_NAck(void) {IIC_SCL_SETL;SDA_OUT();IIC_SDA_SETH;DELAY_US(2);IIC_SCL_SETH;DELAY_US(5);IIC_SCL_SETL; }//IIC發(fā)送一個(gè)字節(jié) void IIC_Send_Byte(unsigned char txd) {unsigned char t;SDA_OUT();IIC_SCL_SETL;//拉低時(shí)鐘開(kāi)始數(shù)據(jù)傳輸for(t=0;t<8;t++){if((txd&0x80)>0) //0x80 1000 0000IIC_SDA_SETH;elseIIC_SDA_SETL;txd<<=1;DELAY_US(2); //對(duì)TEA5767這三個(gè)延時(shí)都是必須的IIC_SCL_SETH;DELAY_US(2);IIC_SCL_SETL;DELAY_US(2);} }//IIC讀一個(gè)字節(jié)ack=1時(shí),發(fā)送ACK,ack=0,發(fā)送nACK unsigned char IIC_Read_Byte(unsigned char ack) {unsigned char i,receive=0;SDA_IN();//SDA設(shè)置為輸入for(i=0;i<8;i++ ){IIC_SCL_SETL;DELAY_US(2);IIC_SCL_SETH;receive<<=1;if(READ_SDA)receive++;DELAY_US(1);}if (!ack)IIC_NAck();//發(fā)送nACKelseIIC_Ack(); //發(fā)送ACKreturn receive; }FLASH燒寫(xiě)配置
將工程目錄“DSP2833x_Libraries”下的 28335_RAM_lnk.cmd 刪除,然后從 TI 提供 給我 們的 庫(kù)文件 中把 “ F28335.cmd” 拷貝 到現(xiàn) 在實(shí) 驗(yàn)文件 夾“DSP2833x_Libraries”目錄下
main.c文件 #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File#include "leds.h" #include "time.h" #include "uart.h" #include "stdio.h"void main() {Uint16 i=0;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();//復(fù)制對(duì)時(shí)間敏感代碼和 FLASH 配置代碼到 RAM 中// 包括 FLASH 初始化函數(shù) InitFlash();// 鏈 接 后 將 產(chǎn) 生 RamfuncsLoadStart, RamfuncsLoadEnd, 和RamfuncsRunStart// 參數(shù). 請(qǐng)參考 F28335.cmd 文件MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd,&RamfuncsRunStart);// 調(diào)用 FLASH 初始化函數(shù)來(lái)設(shè)置 flash 等待狀態(tài)// 這個(gè)函數(shù)必須在 RAM 中運(yùn)行InitFlash();LED_Init();TIM0_Init(150,200000);//200msUARTa_Init(4800);while(1){// 上面的兩條語(yǔ)句 + “F28335.cmd” 配置文件} }SD卡配置(SD 卡 2.0 協(xié)議)
//=======SD卡初始化流程 1、初始化與 SD 卡連接的硬件條件( MCU 的 SPI 配置, IO 口配置); 2、上電延時(shí)( >74 個(gè) CLK); 3、復(fù)位卡( CMD0),進(jìn)入 IDLE 狀態(tài); 4、發(fā)送 CMD8,檢查是否支持 2.0 協(xié)議; 5、根據(jù)不同協(xié)議檢查 SD 卡(命令包括: CMD55、 CMD41、 CMD58 和 CMD1 等); 6、取消片選,發(fā)多 8 個(gè) CLK,結(jié)束初始化 //======SD 卡讀取數(shù)據(jù),這里通過(guò) CMD17 來(lái)實(shí)現(xiàn), 1、發(fā)送 CMD17; 2、接收卡響應(yīng) R1; 3、接收數(shù)據(jù)起始令牌 0XFE; 4、接收數(shù)據(jù); 5、接收 2 個(gè)字節(jié)的 CRC,如果不使用 CRC,這兩個(gè)字節(jié)在讀取后可以丟掉。 6、禁止片選之后,發(fā)多 8 個(gè) CLK; //======SD 卡寫(xiě)數(shù)據(jù)通過(guò) CMD24 來(lái)實(shí)現(xiàn), 1、發(fā)送 CMD24; 2、接收卡響應(yīng) R1; 3、發(fā)送寫(xiě)數(shù)據(jù)起始令牌 0XFE; 4、發(fā)送數(shù)據(jù); 5、發(fā)送 2 字節(jié)的偽 CRC; 6、禁止片選之后,發(fā)多 8 個(gè) CLK;總結(jié)
以上是生活随笔為你收集整理的dsp28335杂记2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jar包扫描工具: gamma
- 下一篇: 贼法,要想打好打高,几条建议