DSP_GPIO
Digital I/O Unit
GPIO(英語:General-purpose input/output),通用型之輸入輸出的簡稱,其接腳可以供使用者由程式控制自由使用,PIN腳依現實考量可作為通用輸入(GPI)或通用輸出(GPO)或通用輸入與輸出(GPIO),如當clk generator, chip select等。
既然一個引腳可以用於輸入、輸出或其他特殊功能,那麼一定有暫存器用來選擇這些功能。對於輸入,一定可以通過讀取某個暫存器來確定引腳電位的高低;對於輸出,一定可以通過寫入某個暫存器來讓這個引腳輸出高電位或者低電位;對於其他特殊功能,則有另外的暫存器來控制它們。

- 寄存器組“GPxPUD”可用於禁止內部上拉電阻,使電壓電平保持懸空或高阻態。
- 當選擇數字I / O功能時,寄存器組GPxDIR定義I / O的方向。將位清零將該行配置為輸入,將位位置為1將該行配置為輸出。
- 當從輸入去讀取的數據是通過一組GPxDAT寄存器執行的。
- 寫入輸出時的數據也可以通過寄存器GPxDAT來執行。另外,還有3組寄存器:
-
GPxSET
-
GPxCLEAR
-
GPxTOGGLE
這些寄存器的目的是使用掩碼技術來設置,清除或切換這些輸出值時,這些輸出行對應於正在使用的掩碼中設置為1的位。例如,要將GPIO5清零,可以使用以下指令:
GpioDataRegs.GPACLEAR.bit.GPIO5 = 1;

F2833x Pin Assignment(分配)
接下來的五張幻燈片顯示了所有88個I / O線的複用分配:





Lab 5_1: Digital Output at 4 LEDs

// // Lab5_1: TMS320F28335 // (c) Frank Bormann // //########################################################################### // // FILE: Lab5_1.c // // TITLE: DSP28335ControlCARD; Digital Output // 4 - bit - counter at 4 LEDs LD1(GPIO9), LD2(GPIO11), LD3(GPIO34) // and LD4 (GPIO49) // software delay loop; watchdog disabled // template file for Lab5_1 //########################################################################### // Ver | dd mmm yyyy | Who | Description of changes // =====|=============|======|=============================================== // 3.0 | 02 May 2008 | F.B. | Lab5_1 for F28335; // 3.1 | 06 Nov 2009 | F.B | Lab5_1 for F28335 and PE revision5 //########################################################################### #include "DSP2833x_Device.h" // Prototype statements for functions found within this file. void Gpio_select(void); void InitSystem(void); void delay_loop(long); //########################################################################### // main code //########################################################################### void main(void) { int counter=0; // binary counter for digital output InitSystem(); // Basic Core Initialization DINT; // Disable all interrupts Gpio_select(); // GPIO9,GPIO11,GPIO34 and GPIO49 as output (LEDs @ peripheral explorer) while(1) { counter++; // place your code to analyze counter here // if bit 0 of counter = 1, set GPIO9 to 1 // if bit 1 of counter = 1, set GPIO11 to 1 // if bit 2 of counter = 1, set GPIO34 to 1 // if bit 3 of counter = 1, set GPIO49 to 1 if(counter&1) GpioDataRegs.GPASET.bit.GPIO9 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO9 = 1; if(counter&2) GpioDataRegs.GPASET.bit.GPIO11 = 1; else GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; if(counter&4) GpioDataRegs.GPBSET.bit.GPIO34 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; if(counter&8) GpioDataRegs.GPBSET.bit.GPIO49 = 1; else GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1; delay_loop(1000000); //值*10^-7 = Delay time } } void delay_loop(long end) { long i; for (i = 0; i < end; i++) { asm(" NOP"); // EALLOW; // SysCtrlRegs.WDKEY = 0x55; // SysCtrlRegs.WDKEY = 0xAA; // EDIS; } } void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0; // GPIO15 ... GPIO0 = General Puropse I/O GpioCtrlRegs.GPAMUX2.all = 0; // GPIO31 ... GPIO16 = General Purpose I/O GpioCtrlRegs.GPBMUX1.all = 0; // GPIO47 ... GPIO32 = General Purpose I/O GpioCtrlRegs.GPBMUX2.all = 0; // GPIO63 ... GPIO48 = General Purpose I/O GpioCtrlRegs.GPCMUX1.all = 0; // GPIO79 ... GPIO64 = General Purpose I/O GpioCtrlRegs.GPCMUX2.all = 0; // GPIO87 ... GPIO80 = General Purpose I/O GpioCtrlRegs.GPADIR.all = 0; GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; // peripheral explorer: LED LD1 at GPIO9 GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; // peripheral explorer: LED LD2 at GPIO11 GpioCtrlRegs.GPBDIR.all = 0; // GPIO63-32 as inputs GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // peripheral explorer: LED LD3 at GPIO34 GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1; // peripheral explorer: LED LD4 at GPIO49 GpioCtrlRegs.GPCDIR.all = 0; // GPIO87-64 as inputs EDIS; EDIS; } void InitSystem(void) { EALLOW; // SysCtrlRegs.WDCR = 0x0028; // Watchdog enabled, 4.3 milliseconds // SysCtrlRegs.SCSR = 0x0000; // Watchdog will cause a reset SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; SysCtrlRegs.PLLCR.bit.DIV = 10; // 30MHz * 10 / 2 = 150 MHz SYSCLK SysCtrlRegs.HISPCP.all = 0x0001; // SYSCLK / 2 SysCtrlRegs.LOSPCP.all = 0x0002; // SYSCLK / 4 SysCtrlRegs.PCLKCR0.all = 0x0000; SysCtrlRegs.PCLKCR1.all = 0x0000; SysCtrlRegs.PCLKCR3.all = 0x0000; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; EDIS; } //=========================================================================== // End of SourceCode. //===========================================================================

浙公网安备 33010602011771号