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、控制寄存器
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.
//===========================================================================
DSP28335 GPIO学习的更多相关文章
- 智能车学习(二)—— GPIO学习
一.概述 使用的是蓝宇的底层,主要有初始化管脚,设置管脚状态,反转管脚状态等. 二.代码重述: 1.头文件gpio.h #ifndef GPIO_H //防止重复定义(gpio_H 开头) #defi ...
- 第十八篇 -- GPIO学习
先学习一下GPIO,网上各种找资料,拼凑,所以就不一一贴网址了. 一.GPIO GPIO的英文全称General-Purpose Input /Output Ports,中文意思是通用I/O端口 一个 ...
- 智能车学习(十四)——K60单片机GPIO学习
一.头文件: #ifndef __MK60_GPIO_H__ #define __MK60_GPIO_H__ #include "MK60_gpio_cfg.h" /* * 定义管 ...
- DSP5509的GPIO学习-第5篇
1. 使用CCS V6.1版本,目前已经不局限于仅仅把实验搞清楚了,要深入去探究内部的原理,本章看下GPIO实验 2. 在CCS启动的时候,提示,这个问题是什么,XDAIS是什么?XDAIS (eXp ...
- STM32F103之GPIO学习记录
9 GPIO:通用I/O口 AFIO:可供选择的I/O口 9.1 GPIO功能描述 每一个通用的I/O口都有: 两个32位的配置寄存器(配置寄存器低和配置寄存器高): 两个32位的数据寄存器(输入数据 ...
- 17.3.15---关于GPIO学习笔记
STM32的IO口可以由软件配置成为8种模式: 1--输入浮空 2--输入上拉 3--输入下拉 4--模拟输入 5--开漏输出 6--推挽输出 7--推挽复用 8--开漏复用 STM32的每个IO口都 ...
- STM32学习笔记(三) STM32的GPIO的深入学习
STM32的开发学习主要涉及软硬件两个部分的实现,包含众多外设和总线的理解配置.STM32的整个学习曲线并不陡峭,但入门却相当困难,因此在学习之初,多动手实验和测试相当重要,GPIO作为整个STM32 ...
- Cortex-M3学习日志(一)-- GPIO实验
因为项目所需,所以不得不开始研究M3,我用的是NXP公司的LPC1768这个芯片,它是具有三级流水线的哈佛结构,带独立的本地指令和数据总线以及用于外设的稍微低性能的第三条总线,还包含一个支持随机跳转的 ...
- 树莓派学习笔记——使用文件IO操作GPIO SysFs方式
0 前言 本文描写叙述假设通过文件IO sysfs方式控制树莓派 GPIO端口.通过sysfs方式控制GPIO,先訪问/sys/class/gpio文件夹,向export文件写入GPIO编号, ...
随机推荐
- feign请求远程接口时报Caused by: java.net.UnknownHostException
报错全文如下 feign.RetryableException: host10.local executing POST http://TIBMAS2-WEBAPI/tibmas2-webapi/ap ...
- re模块的小练习
1.匹配标签 1 import re 2 ret = re.search('<(?P<tag_name>\w+)>\w+</(?P=tag_name)>','< ...
- sizeof运算符、虚函数、虚继承考点(待修改)
参考: http://blog.csdn.net/wangyangkobe/article/details/5951248 下面的文章解释有错误,不要看.......... 记住几句话: 编译器为每个 ...
- Coding 账户与 本地 Git 客户端的配置
1.先创建cooding账户 ,注册地址:https://coding.net/ 2.创建好账户后登陆,在个人设置中 验证邮箱 和 验证手机 (邮箱很重要配置需要用到) 3.安装git 客户端 (在 ...
- 项目的Servlet类找不到
先右击项目,
- textstudio添加中文支持
修改编译器为XeLaTeX,方法如下: Options -> Configure -> Build -> Default Compiler -> XeLaTeX 并在文本开头处 ...
- 捕获有问题的SQL
- JavaWeb_(SSH论坛)_六、点赞模块
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 联合主键 创建p ...
- Spring理解?
(1)Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,是解决企业应用开发的复杂性,为J2EE应用提供了全方位的整合框架,在Spring框架下实现多个子框架的组合. (2)Sp ...
- C++入门经典-例4.11-名称空间的定义和使用
1:名称空间,也成为名字空间.命名空间,关键字为namespace.我们经常使用这样一条语句: using namespace std: 我们要使用标准输入输出流,除了包含它们所在的头文件外,还必须使 ...