DSP28335 GPIO学习
2024-09-01 01:54:16
根据网络资料以及以下两篇博客整理
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.
//===========================================================================
最新文章
- node-webkit 使用requirejs 小结
- linkedin开源的kafka-monitor安装文档
- 关于print和echo的区别
- aps.net 图形验证码(转)
- hdu 1133 Buy the Ticket
- 【转】MFC窗口句柄各类指针获取函数
- W3C词汇和术语表
- Inno Setup 插件 CallbackCtrl V1.1 (回调函数插件)
- TextView实现多个TextView对象的走马灯效果
- 认识axure部件库中各个部件的属性
- Python快速入门(1)
- phpcms课堂笔记
- mybatis 详解(十一)------ mybatis和spring整合
- C#的数据类型总结(2):decimal ,double,float的区别
- 【项目管理】 项目管理术语总结 (PMP培训笔记)
- 2019OO第二单元作业总结
- 潭州课堂25班:Ph201805201 爬虫基础 第十四课 js破解 (课堂笔记)
- 文件二进制与String相互转换
- java中的数据结构
- java项目配置域名(tomcat直接配置 or 使用nginx反向代理)
热门文章
- spring注解 @profile 以及 注解@Slf4j
- 【转载】Java File操作汇总
- web性能优化-浏览器工作原理
- MySQL user表初始化
- python生成二维码图片
- react 引入swiper
- Nowcoder Playing Games ( FWT 优化 DP &;&; 博弈论 &;&; 线性基)
- Confluence 6 Office 和 PDF 文件
- vue 组件 Vue.component 用法
- 关于Hibernate中Java实体类加载出现序列化异常