1. F28335的時鍾系統
1.1 時鍾來源
F28335的時鍾源有兩種:
- 采用外部振盪器作為時鍾源(簡稱外部時鍾),在XCLKIN引腳提供一個一定頻率的時鍾信號,或通過復用的X1引腳接入,即由其他數字系統或外部振盪器引入;
- 采用F28335內部振盪器作為時鍾源(簡稱內部時鍾),在X1與X2之間接入一個晶體,就可以產生時鍾源。
外部時鍾源信號有兩種:
- 3.3V外部時鍾源信號直接接入XCLKIN引腳,X1引腳接地,X2引腳懸空;
- 1.9V外部時鍾源信號直接接入X1引腳,XCLKIN引腳接地,x2引腳懸空。
內部信號時鍾源接法:
典型做法是在X1和X2之間接入30MHz晶振,內部鎖相環10倍頻,然后二分頻。
鎖相環模塊除了為C28X內核提供時鍾外,還通過系統時鍾輸出提供快速和慢速2中外設時鍾,從而提高處理器的靈活性和可靠性。在具體應用中,將不使用的外設時鍾禁止,還可以降低系統功耗。
1.2 時鍾單元相關寄存器
1. 鎖相環狀態寄存器PLLSTS
- 15~9位:保留;
- 8~7位:DIVSEL,時鍾分頻選擇;
- 00 01——4分頻
- 10——2分頻
- 11——1分頻
- 6位:MCLKOFF,丟失時鍾檢測關閉位;
- 0——默認設置,主振盪器時鍾丟失檢測使能
- 1——主振盪器時鍾丟失檢測禁止
- 5位:OSCOFF,控制振盪器時鍾信號,該位為1,振盪器信號允許通過,兵分兩路,一路直接過去,一路進入鎖相環模塊;
- 4位:MCLKCLR,丟失時鍾清除位,若該位寫0,無效,寫1強制丟失時鍾信號檢測電路清除和復位;
- 3位:MCLKSTS, 丟失時鍾信號狀態位,0為正常模式,表示時鍾信號沒有丟失,1表示時鍾信號丟失,CPU工作在無序頻率模式;
- 2位:PLLOFF,鎖相器關閉位;
- 1位:保留;
- 0位:PLLOCKS:鎖相器鎖狀態位。
2. 高/低速外設時鍾預分頻寄存器HISPCP/LOSPCP
高速外設時鍾預分頻寄存器位分配:
低速外設時鍾預分頻寄存器位分配:
3. 鎖相環控制寄存器PLLCR
時鍾初始化函數:
void InitSysCtrl(void) { // Disable the watchdog DisableDog(); // Initialize the PLL control: PLLCR and DIVSEL // DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h InitPll(DSP28_PLLCR,DSP28_DIVSEL); // Initialize the peripheral clocks InitPeripheralClocks(); }
2. GPIO介紹
2.1 GPIO分組
GPIO(general purpose intput output)是通用輸入輸出端口的簡稱,可以通過軟件來控制其輸入和輸出。
TMS320F28335共有176引腳,其中88個是GPIO管腳。
A組:GPIO 0~31,B組:GPIO 32~63,C組:GPIO 64~87。
2.2 采樣
采樣濾波電路——濾除干擾信號:
2.3 GPIO相關寄存器
A組為例:
外部中斷:
3. 硬件介紹
4. 軟件設計
(1)初始化LED控制IO口(使能對應IO外設時鍾、配置IO為普通IO功能和輸出模式、上拉設置等)
(2)LED控制程序
4.1 leds.c
/* * leds.c * * Created on: 2020年4月6日 * Author: lenovo */ #include "leds.h" /******************************************************************************* * 函 數 名 : LED_Init * 函數功能 : LED初始化函數 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void LED_Init(void) { EALLOW;//關閉寫保護 SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 開啟GPIO時鍾 //LED1端口配置 GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//設置為通用GPIO功能 GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//設置GPIO方向為輸出 GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉電阻 //LED2端口配置 GpioCtrlRegs.GPCMUX1.bit.GPIO67=0; GpioCtrlRegs.GPCDIR.bit.GPIO67=1; GpioCtrlRegs.GPCPUD.bit.GPIO67=0; //LED3端口配置 GpioCtrlRegs.GPCMUX1.bit.GPIO66=0; GpioCtrlRegs.GPCDIR.bit.GPIO66=1; GpioCtrlRegs.GPCPUD.bit.GPIO66=0; //LED4端口配置 GpioCtrlRegs.GPCMUX1.bit.GPIO65=0; GpioCtrlRegs.GPCDIR.bit.GPIO65=1; GpioCtrlRegs.GPCPUD.bit.GPIO65=0; //LED5端口配置 GpioCtrlRegs.GPCMUX1.bit.GPIO64=0; GpioCtrlRegs.GPCDIR.bit.GPIO64=1; GpioCtrlRegs.GPCPUD.bit.GPIO64=0; //LED6端口配置 GpioCtrlRegs.GPAMUX1.bit.GPIO10=0; GpioCtrlRegs.GPADIR.bit.GPIO10=1; GpioCtrlRegs.GPAPUD.bit.GPIO10=0; //LED7端口配置 GpioCtrlRegs.GPAMUX1.bit.GPIO11=0; GpioCtrlRegs.GPADIR.bit.GPIO11=1; GpioCtrlRegs.GPAPUD.bit.GPIO11=0; //初始輸出高電平(LED熄滅) GpioDataRegs.GPCSET.bit.GPIO68=1; GpioDataRegs.GPCSET.bit.GPIO67=1; GpioDataRegs.GPCSET.bit.GPIO66=1; GpioDataRegs.GPCSET.bit.GPIO65=1; GpioDataRegs.GPCSET.bit.GPIO64=1; GpioDataRegs.GPASET.bit.GPIO10=1; GpioDataRegs.GPASET.bit.GPIO11=1; EDIS;//開啟寫保護 }
GPCMUX1控制GPIO64~79
4.2 leds.h
/* * leds.h * * Created on: 2020年4月6日 * Author: lenovo */ #ifndef LEDS_H_ #define LEDS_H_ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File #define LED1_OFF (GpioDataRegs.GPCSET.bit.GPIO68=1) #define LED1_ON (GpioDataRegs.GPCCLEAR.bit.GPIO68=1) #define LED1_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO68=1) #define LED2_OFF (GpioDataRegs.GPCSET.bit.GPIO67=1) #define LED2_ON (GpioDataRegs.GPCCLEAR.bit.GPIO67=1) #define LED2_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO67=1) #define LED3_OFF (GpioDataRegs.GPCSET.bit.GPIO66=1) #define LED3_ON (GpioDataRegs.GPCCLEAR.bit.GPIO66=1) #define LED3_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO66=1) #define LED4_OFF (GpioDataRegs.GPCSET.bit.GPIO65=1) #define LED4_ON (GpioDataRegs.GPCCLEAR.bit.GPIO65=1) #define LED4_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO65=1) #define LED5_OFF (GpioDataRegs.GPCSET.bit.GPIO64=1) #define LED5_ON (GpioDataRegs.GPCCLEAR.bit.GPIO64=1) #define LED5_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO64=1) #define LED6_OFF (GpioDataRegs.GPASET.bit.GPIO10=1) #define LED6_ON (GpioDataRegs.GPACLEAR.bit.GPIO10=1) #define LED6_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO10=1) #define LED7_OFF (GpioDataRegs.GPASET.bit.GPIO11=1) #define LED7_ON (GpioDataRegs.GPACLEAR.bit.GPIO11=1) #define LED7_TOGGLE (GpioDataRegs.GPATOGGLE.bit.GPIO11=1) void LED_Init(void); #endif /* LEDS_H_ */
利用宏定義便於電平切換。
4.3 main.c
/* * main.c * * Created on: 2020年4月6日 * Author: lenovo */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File #include "leds.h" /******************************************************************************* * 函 數 名 : delay * 函數功能 : 延時函數,通過循環占用CPU,達到延時功能 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void delay(void) { Uint16 i; Uint32 j; for(i=0;i<32;i++) for (j = 0; j < 50000; j++); } /******************************************************************************* * 函 數 名 : main * 函數功能 : 主函數 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main() { InitSysCtrl(); LED_Init(); while(1) { LED5_OFF;LED1_ON;delay(); LED1_OFF;LED2_ON;delay(); LED2_OFF;LED3_ON;delay(); LED3_OFF;LED4_ON;delay(); LED4_OFF;LED5_ON;delay(); } }
4.4 效果


















