根据网络资料以及以下两篇博客整理

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、控制寄存器

 GPxCTRL;    // GPIO x Control Register (GPIO0 to 31)
//设置采样窗周期T=2*GPXCTRL*Tsysclk;
GPxQSEL1; // GPIO x Qualifier Select 1 Register (GPIO0 to 15)(32-47) GPxQSEL2; // GPIO x Qualifier Select 2 Register (GPIO16 to 31)(48-63)
//每两位控制一个引脚,确定是3周期采样还是6周期采样或者不用采样
GPxMUX1; // GPIO x Mux 1 Register (GPIO0 to 15)(32-47)(64-79)
GPxMUX2; // GPIO x Mux 2 Register (GPIO16 to 31)(48-63)(80-95)
//配置各个引脚的功能,0:I/O功能,1:外设功能。
GPxDIR; // GPIO x Direction Register (GPIO0 to 31)(32-63)(64-95)
//配置每个引脚是输入还是输出,0:数字量输入;1:数字量输出。
GPxPUD; // GPIO x Pull Up Disable Register (GPIO0 to 31)(32-63)(64-95)
//使能或禁止jie口的内部上拉

2、数据寄存器

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

3、中断寄存器

  GPIOXINT1SEL; // XINT1 GPIO Input Selection
GPIOXINT2SEL; // XINT2 GPIO Input Selection
GPIOXNMISEL; // XNMI_Xint13 GPIO Input Selection
GPIOXINT3SEL; // XINT3 GPIO Input Selection
GPIOXINT4SEL; // XINT4 GPIO Input Selection
GPIOXINT5SEL; // XINT5 GPIO Input Selection
GPIOXINT6SEL; // XINT6 GPIO Input Selection
GPIOXINT7SEL; // XINT7 GPIO Input Selection
GPIOLPMSEL; // Low power modes GP I/O input select
可以对GPIO0-63进行外部中断设置

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

在《手把手教你学DSP》的第六章为GPIO介绍,在配套例程配套文档例程资料\CCS4.12\lab2-GPIO_SETUP下的DSP2833x_Gpio.c程序如下

 // TI File $Revision: /main/1 $
// Checkin $Date: August 18, 2006 13:46:25 $
//###########################################################################
//
// FILE: DSP2833x_Gpio.c
//
// TITLE: DSP2833x 通用 I/O 初始化& 支持函数.
//
//###########################################################################
// $TI Release: DSP2833x Header Files V1.01 $
// $Release Date: September 26, 2007 $
//########################################################################### #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File //---------------------------------------------------------------------------
// InitGpio:
//---------------------------------------------------------------------------
// 该函数初始化到一个已知的(默认)状态.
//
// 更多关于配置GPIO外围功能的细节,
// 请参照个人设置的外围例子/或 GPIO 设置示例.
void InitGpio(void)
{
EALLOW; // 每个 GPIO pin 都可以:
// a) a GPIO 输入/输出
// b) 外设功能 1
// c) 外设功能 2
// d) 外设功能 3
// 默认情况下, 所有的 GPIO 都为输入
GpioCtrlRegs.GPAMUX1.all = 0x0000; // GPIO 功能 GPIO0-GPIO15
GpioCtrlRegs.GPAMUX2.all = 0x0000; // GPIO 功能 GPIO16-GPIO31
GpioCtrlRegs.GPBMUX1.all = 0x0000; // GPIO 功能 GPIO32-GPIO39
GpioCtrlRegs.GPBMUX2.all = 0x0000; // GPIO 功能 GPIO48-GPIO63
GpioCtrlRegs.GPCMUX1.all = 0x0000; // GPIO 功能 GPIO64-GPIO79
GpioCtrlRegs.GPCMUX2.all = 0x0000; // GPIO 功能 GPIO80-GPIO95 GpioCtrlRegs.GPADIR.all = 0x0000; // GPIO0-GPIO31 都为输入
GpioCtrlRegs.GPBDIR.all = 0x0000; // GPIO32-GPIO63 都为输入
GpioCtrlRegs.GPCDIR.all = 0x0000; // GPI064-GPIO95 都为输入 // 每个输入都可以有不同的限制
// a) 输入信号同步 to SYSCLKOUT
// b) 输入合适的采样窗口
// c) 异步输入模式 (仅外围输入有效)
GpioCtrlRegs.GPAQSEL1.all = 0x0000; // GPIO0-GPIO15 同步 to SYSCLKOUT
GpioCtrlRegs.GPAQSEL2.all = 0x0000; // GPIO16-GPIO31 同步 to SYSCLKOUT
GpioCtrlRegs.GPBQSEL1.all = 0x0000; // GPIO32-GPIO39 同步 to SYSCLKOUT
GpioCtrlRegs.GPBQSEL2.all = 0x0000; // GPIO48-GPIO63 同步 to SYSCLKOUT // 上拉可以禁止或使能.
GpioCtrlRegs.GPAPUD.all = 0x0000; // 启用上拉 GPIO0-GPIO31
GpioCtrlRegs.GPBPUD.all = 0xffff;    //0x0000; // 启用上拉 GPIO32-GPIO63
GpioCtrlRegs.GPCPUD.all = 0x0000; // 启用上拉 GPIO64-GPIO79 //GpioCtrlRegs.GPAPUD.all = 0xFFFF; // 禁止上拉 GPIO0-GPIO31
//GpioCtrlRegs.GPBPUD.all = 0xFFFF; // 禁止上拉 GPIO32-GPIO34
//GpioCtrlRegs.GPCPUD.all = 0xFFFF // 禁止上拉 GPIO64-GPIO79 EDIS; } //=========================================================
// End of file.
//=========================================================

GPIO的控制实例在《手把手教你学DSP》配套例程CCS4.12\lab1-GPIO_LED下控制LED灯闪烁

 #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File #define LED1 GpioDataRegs.GPADAT.bit.GPIO0 //数据寄存器宏定义
#define LED2 GpioDataRegs.GPADAT.bit.GPIO1
#define LED3 GpioDataRegs.GPADAT.bit.GPIO2
#define LED4 GpioDataRegs.GPADAT.bit.GPIO3
#define LED5 GpioDataRegs.GPADAT.bit.GPIO4
#define LED6 GpioDataRegs.GPADAT.bit.GPIO5 interrupt void ISRTimer0(void);
void configtestled(void); void main(void)
{
// 步骤 1. 初始化系统控制:
// PLL, WatchDog, 使能外围时钟
// 这个函数在 DSP2833x_SysCtrl.c 文件中.
InitSysCtrl(); // 步骤 2. 初始化设置 GPIO:
// 这个函数例子在 DSP2833x_Gpio.c 文件中
// 说明了如何设置GPIO的默认状态.
// InitGpio(); // 跳过这个函数
InitXintf16Gpio(); //zq // 步骤 3. 清除所有中断向量和初始化向量表:
// 禁止CPU中断
DINT; // 初始化PIE控制寄存器的默认状态.
// 默认状态是所有的中断和中断标志被清除
// 这个函数在 DSP2833x_PieCtrl.c 文件中.
InitPieCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000; // 初始化中断向量表的地址指针
// 中断服务程序 (ISR).
// 即使不使用中断也要将表格填充满, 这样的目的是用于调试.
// 这个函数在 DSP2833x_DefaultIsr.c文件中
// 这个函数在 DSP2833x_PieVect.c.文件中
InitPieVectTable();
configtestled(); LED1=;
DELAY_US();
LED2=;
DELAY_US();
LED3=;
DELAY_US();
LED4=;
DELAY_US();
LED5=;
DELAY_US();
LED6=;
DELAY_US(); while(){
LED1=~LED1;
DELAY_US();
LED2=~LED2;
DELAY_US();
LED3=~LED3;
DELAY_US();
LED4=~LED4;
DELAY_US();
LED5=~LED5;
DELAY_US();
LED6=~LED6;
DELAY_US(); } } void configtestled(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = ; // GPIO0 = GPIO0
GpioCtrlRegs.GPADIR.bit.GPIO0 = ; // 输出
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = ; // GPIO1 = GPIO1
GpioCtrlRegs.GPADIR.bit.GPIO1 = ; // 输出
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = ; // GPIO2 = GPIO2
GpioCtrlRegs.GPADIR.bit.GPIO2 = ; // 输出
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = ; // GPIO3 = GPIO3
GpioCtrlRegs.GPADIR.bit.GPIO3 = ; // 输出
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = ; // GPIO4 = GPIO4
GpioCtrlRegs.GPADIR.bit.GPIO4 = ; // 输出
GpioCtrlRegs.GPAMUX1.bit.GPIO5 = ; // GPIO5 = GPIO5
GpioCtrlRegs.GPADIR.bit.GPIO5 = ; // 输出 EDIS;
}
//===========================================================================
// No more.
//===========================================================================

最新文章

  1. node-webkit 使用requirejs 小结
  2. linkedin开源的kafka-monitor安装文档
  3. 关于print和echo的区别
  4. aps.net 图形验证码(转)
  5. hdu 1133 Buy the Ticket
  6. 【转】MFC窗口句柄各类指针获取函数
  7. W3C词汇和术语表
  8. Inno Setup 插件 CallbackCtrl V1.1 (回调函数插件)
  9. TextView实现多个TextView对象的走马灯效果
  10. 认识axure部件库中各个部件的属性
  11. Python快速入门(1)
  12. phpcms课堂笔记
  13. mybatis 详解(十一)------ mybatis和spring整合
  14. C#的数据类型总结(2):decimal ,double,float的区别
  15. 【项目管理】 项目管理术语总结 (PMP培训笔记)
  16. 2019OO第二单元作业总结
  17. 潭州课堂25班:Ph201805201 爬虫基础 第十四课 js破解 (课堂笔记)
  18. 文件二进制与String相互转换
  19. java中的数据结构
  20. java项目配置域名(tomcat直接配置 or 使用nginx反向代理)

热门文章

  1. spring注解 @profile 以及 注解@Slf4j
  2. 【转载】Java File操作汇总
  3. web性能优化-浏览器工作原理
  4. MySQL user表初始化
  5. python生成二维码图片
  6. react 引入swiper
  7. Nowcoder Playing Games ( FWT 优化 DP && 博弈论 && 线性基)
  8. Confluence 6 Office 和 PDF 文件
  9. vue 组件 Vue.component 用法
  10. 关于Hibernate中Java实体类加载出现序列化异常