DSP28335 GPIO學習


根據網絡資料以及以下兩篇博客整理

http://blog.sina.com.cn/s/blog_86a6035301017rr7.html

http://blog.csdn.net/hmf1235789/article/details/51883714

  

  F28335 DSP將這88個GPIO口分成了A、B、C三大組,A組包括GPIO0至GPIO31,B組包括GPIO32至GPIO63,C組包括GPIO64至GPIO87,每個引腳都復用了多個功能,同一時刻,每個引腳只能用該引腳的一個功能。究竟工作在哪個模式下,可以通過GPIO Mux(復用開關)寄存器配置每個引腳的具體功能(通用數字量I/O或者外設專用功能)。如果將這些引腳選擇數字量I/O模式,可以通過方向寄存器GPxDIR配置數字量I/O的方向,即是作為輸入引腳還是作為輸出引腳;還可以通過量化寄存器GPxQUAL對輸入信號進行量化限制,從而可以消除數字量I/O引腳的噪聲干擾。

  對GPIO模塊的設置主要通過三類寄存器來完成,分別是:控制寄存器、數據寄存器、中斷寄存器。

1、控制寄存器

 1 GPxCTRL;    // GPIO x Control Register (GPIO0 to 31)
 2               //設置采樣窗周期T=2*GPXCTRL*Tsysclk;
 3   GPxQSEL1;   // GPIO x Qualifier Select 1 Register (GPIO0 to 15)(32-47)
 4              
 5   GPxQSEL2;   // GPIO x Qualifier Select 2 Register (GPIO16 to 31)(48-63)
 6               //每兩位控制一個引腳,確定是3周期采樣還是6周期采樣或者不用采樣
 7   GPxMUX1;    // GPIO x Mux 1 Register (GPIO0 to 15)(32-47)(64-79)
 8   GPxMUX2;    // GPIO x Mux 2 Register (GPIO16 to 31)(48-63)(80-95)
 9               //配置各個引腳的功能,0:I/O功能,1:外設功能。
10   GPxDIR;     // GPIO x Direction Register (GPIO0 to 31)(32-63)(64-95)
11               //配置每個引腳是輸入還是輸出,0:數字量輸入;1:數字量輸出。
12   GPxPUD;     // GPIO x Pull Up Disable Register (GPIO0 to 31)(32-63)(64-95)
13               //使能或禁止jie口的內部上拉

2、數據寄存器

1  GPxDAT;     // GPIO Data Register (GPIO0 to 31)(32-63)(64-95)
2  GPxSET;     // GPIO Data Set Register (GPIO0 to 31)(32-63)(64-95)
3  GPxCLEAR;   // GPIO Data Clear Register (GPIO0 to 31)(32-63)(64-95)
4  GPxTOGGLE;  // GPIO Data Toggle Register (GPIO0 to 31)(32-63)(64-95)

3、中斷寄存器

 1  GPIOXINT1SEL; // XINT1 GPIO Input Selection
 2  GPIOXINT2SEL; // XINT2 GPIO Input Selection
 3  GPIOXNMISEL;  // XNMI_Xint13 GPIO Input Selection
 4  GPIOXINT3SEL; // XINT3 GPIO Input Selection
 5  GPIOXINT4SEL; // XINT4 GPIO Input Selection
 6  GPIOXINT5SEL; // XINT5 GPIO Input Selection
 7  GPIOXINT6SEL; // XINT6 GPIO Input Selection
 8  GPIOXINT7SEL; // XINT7 GPIO Input Selection
 9  GPIOLPMSEL;   // Low power modes GP I/O input select
10 可以對GPIO0-63進行外部中斷設置

注:0~31配置為XINT1、XINT2;32~63配置為XINT3、4、5、6、7

在《手把手教你學DSP》的第六章為GPIO介紹,在配套例程配套文檔例程資料\CCS4.12\lab2-GPIO_SETUP下的DSP2833x_Gpio.c程序如下

 1 // TI File $Revision: /main/1 $
 2 // Checkin $Date: August 18, 2006   13:46:25 $
 3 //###########################################################################
 4 //
 5 // FILE:    DSP2833x_Gpio.c
 6 //
 7 // TITLE:   DSP2833x 通用 I/O 初始化& 支持函數.
 8 //
 9 //###########################################################################
10 // $TI Release: DSP2833x Header Files V1.01 $
11 // $Release Date: September 26, 2007 $
12 //###########################################################################
13 
14 #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
15 #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
16 
17 //---------------------------------------------------------------------------
18 // InitGpio: 
19 //---------------------------------------------------------------------------
20 // 該函數初始化到一個已知的(默認)狀態.
21 //
22 // 更多關於配置GPIO外圍功能的細節,
23 // 請參照個人設置的外圍例子/或 GPIO 設置示例. 
24 void InitGpio(void)
25 {
26    EALLOW;
27 
28    // 每個 GPIO pin 都可以: 
29    // a) a GPIO 輸入/輸出
30    // b) 外設功能 1
31    // c) 外設功能 2
32    // d) 外設功能 3
33    // 默認情況下, 所有的 GPIO 都為輸入 
34    GpioCtrlRegs.GPAMUX1.all = 0x0000;     // GPIO 功能 GPIO0-GPIO15
35    GpioCtrlRegs.GPAMUX2.all = 0x0000;     // GPIO 功能 GPIO16-GPIO31
36    GpioCtrlRegs.GPBMUX1.all = 0x0000;     // GPIO 功能 GPIO32-GPIO39
37    GpioCtrlRegs.GPBMUX2.all = 0x0000;     // GPIO 功能 GPIO48-GPIO63
38    GpioCtrlRegs.GPCMUX1.all = 0x0000;     // GPIO 功能 GPIO64-GPIO79
39    GpioCtrlRegs.GPCMUX2.all = 0x0000;     // GPIO 功能 GPIO80-GPIO95
40 
41    GpioCtrlRegs.GPADIR.all = 0x0000;      // GPIO0-GPIO31 都為輸入
42    GpioCtrlRegs.GPBDIR.all = 0x0000;      // GPIO32-GPIO63 都為輸入   
43    GpioCtrlRegs.GPCDIR.all = 0x0000;      // GPI064-GPIO95 都為輸入
44 
45    // 每個輸入都可以有不同的限制
46    // a) 輸入信號同步 to SYSCLKOUT
47    // b) 輸入合適的采樣窗口
48    // c) 異步輸入模式 (僅外圍輸入有效)
49    GpioCtrlRegs.GPAQSEL1.all = 0x0000;    // GPIO0-GPIO15 同步 to SYSCLKOUT 
50    GpioCtrlRegs.GPAQSEL2.all = 0x0000;    // GPIO16-GPIO31 同步 to SYSCLKOUT
51    GpioCtrlRegs.GPBQSEL1.all = 0x0000;    // GPIO32-GPIO39 同步 to SYSCLKOUT 
52    GpioCtrlRegs.GPBQSEL2.all = 0x0000;    // GPIO48-GPIO63 同步 to SYSCLKOUT 
53 
54    // 上拉可以禁止或使能. 
55    GpioCtrlRegs.GPAPUD.all = 0x0000;      // 啟用上拉 GPIO0-GPIO31
56    GpioCtrlRegs.GPBPUD.all = 0xffff;    //0x0000;      // 啟用上拉 GPIO32-GPIO63
57    GpioCtrlRegs.GPCPUD.all = 0x0000;      // 啟用上拉 GPIO64-GPIO79
58 
59    //GpioCtrlRegs.GPAPUD.all = 0xFFFF;    // 禁止上拉 GPIO0-GPIO31
60    //GpioCtrlRegs.GPBPUD.all = 0xFFFF;    // 禁止上拉 GPIO32-GPIO34
61    //GpioCtrlRegs.GPCPUD.all = 0xFFFF     // 禁止上拉 GPIO64-GPIO79
62 
63    EDIS;
64 
65 }   
66 
67 //=========================================================
68 // End of file.
69 //=========================================================

GPIO的控制實例在《手把手教你學DSP》配套例程CCS4.12\lab1-GPIO_LED下控制LED燈閃爍

  1 #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
  2 #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
  3 
  4 #define   LED1  GpioDataRegs.GPADAT.bit.GPIO0   //數據寄存器宏定義
  5 #define   LED2  GpioDataRegs.GPADAT.bit.GPIO1
  6 #define   LED3  GpioDataRegs.GPADAT.bit.GPIO2
  7 #define   LED4  GpioDataRegs.GPADAT.bit.GPIO3
  8 #define   LED5  GpioDataRegs.GPADAT.bit.GPIO4
  9 #define   LED6  GpioDataRegs.GPADAT.bit.GPIO5
 10 
 11 
 12 
 13 interrupt void ISRTimer0(void); 
 14 void configtestled(void);
 15 
 16 
 17 void main(void)
 18 {
 19 // 步驟 1. 初始化系統控制:
 20 // PLL, WatchDog, 使能外圍時鍾
 21 // 這個函數在 DSP2833x_SysCtrl.c 文件中.
 22    InitSysCtrl();
 23 
 24 // 步驟 2. 初始化設置 GPIO:
 25 // 這個函數例子在 DSP2833x_Gpio.c 文件中
 26 // 說明了如何設置GPIO的默認狀態.
 27 // InitGpio();  // 跳過這個函數
 28    InitXintf16Gpio();   //zq
 29 
 30 // 步驟 3. 清除所有中斷向量和初始化向量表:
 31 // 禁止CPU中斷
 32    DINT;
 33 
 34 // 初始化PIE控制寄存器的默認狀態.
 35 // 默認狀態是所有的中斷和中斷標志被清除
 36 // 這個函數在 DSP2833x_PieCtrl.c 文件中.
 37    InitPieCtrl();
 38 
 39 // Disable CPU interrupts and clear all CPU interrupt flags:
 40    IER = 0x0000;
 41    IFR = 0x0000;
 42 
 43 // 初始化中斷向量表的地址指針
 44 // 中斷服務程序 (ISR).
 45 // 即使不使用中斷也要將表格填充滿, 這樣的目的是用於調試.
 46 // 這個函數在 DSP2833x_DefaultIsr.c文件中
 47 // 這個函數在 DSP2833x_PieVect.c.文件中
 48    InitPieVectTable();
 49    configtestled();
 50 
 51       LED1=1;
 52    DELAY_US(10);
 53       LED2=1;
 54    DELAY_US(10);
 55       LED3=1;
 56    DELAY_US(10);
 57       LED4=0;
 58    DELAY_US(10);
 59       LED5=0;
 60    DELAY_US(10);
 61       LED6=0;
 62    DELAY_US(10);
 63 
 64 
 65  while(1){
 66       LED1=~LED1;
 67    DELAY_US(50000);
 68       LED2=~LED2;
 69    DELAY_US(50000);
 70       LED3=~LED3;
 71    DELAY_US(50000);
 72       LED4=~LED4;
 73    DELAY_US(50000);
 74       LED5=~LED5;
 75    DELAY_US(50000);
 76       LED6=~LED6;
 77    DELAY_US(50000);
 78 
 79 }
 80 
 81 }
 82 
 83 
 84 void configtestled(void)
 85 {
 86    EALLOW;
 87    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0 = GPIO0
 88    GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // 輸出
 89    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
 90    GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  // 輸出
 91    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // GPIO2 = GPIO2
 92    GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;  // 輸出
 93    GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // GPIO3 = GPIO3
 94    GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;  // 輸出
 95    GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // GPIO4 = GPIO4
 96    GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;  // 輸出
 97    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; // GPIO5 = GPIO5
 98    GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;  // 輸出
 99 
100    EDIS;
101 }
102 //===========================================================================
103 // No more.
104 //===========================================================================

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM