软件版本为CCS6.1.3
初始化GPIO68为普通IO口,反转输出电平,实现led闪烁的效果
F28335的GPIO 占用了芯片大部分的引脚,共达 88 个,分为了 3 组
A 组: GPIO0-GPIO31,32个
B 组:GPIO32-GPIO63,32个
C 组:GPIO64-GPIO87,24个
只有AB端口具有数字滤波的功能,GPIO输入可以通过量化寄存器 GPxQUAL 对输入信号进行量化限制,从而可以消除数字量IO引脚的噪声干扰。在限制选择器(GPAQSEL1、GPAQSEL2、GPBQSEL1 和 GPBQSEL2)中信号采样次数被指定为 3 个采样、6 个采样或是不采样,当输入信号在经过 3 个或 6 个采样周期都保持一致时,输入信号才被认为是个有效信号,否则保持原来的状态不变。
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#include "leds.h"
包含头文件。。。。。。
与stm32一样,头文件除在代码中申明,其路径还需在软件设置中包括
右击工程
选择最下方“Properties” 属性,然后
在绿色框中添加头文件路径
主函数
void main()
{
InitSysCtrl(); //关闭看门狗,确定系统主频
LED_Init(); //初始化GPIO
while(1)
{
LED1_TOGGLE; //反转输出电平
delay(); //延时
}
}
DisableDog();关狗
InitPll(DSP28_PLLCR,DSP28_DIVSEL); 确定外部输入时钟的倍频系数和分频系数
外部输入30MHz,10倍频再2分频为150NHz
void InitSysCtrl(void)
{
// Disable the watchdog
DisableDog();
// Initialize the PLL control: PLLCR and DIVSEL
// DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h
InitPll(DSP28_PLLCR,DSP28_DIVSEL);
// Initialize the peripheral clocks
//InitPeripheralClocks();
}
禁止InitPeripheralClocks();因为此函数使能了所有外设的时钟,我觉得还是像32一样用一个使能一个的好,全部使能后芯片明显有温度。。。
void LED_Init(void)
{
EALLOW; //关闭写保护
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 开启GPIO时钟
//LED1端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设置为通用GPIO功能
GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设置GPIO方向为输出
GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻
GpioDataRegs.GPCSET.bit.GPIO68=1;
EDIS; //开启写保护
}
GpioCtrlRegs.GPCMUX1.bit.GPIOn=xx;
xx=0,GPIO功能;xx=1,外设1;xx=2,外设2;xx=3,外设3;
为什么是“GPCMUX1”?这个“MUX1”是什么的缩写?
GPnMUX1和GPnMUX2分别对应16个IO
GpioCtrlRegs.GPCDIR.bit.GPIOn=xx; 0输入 1输出
GpioCtrlRegs.GPCPUD.bit.GPIOn=xx; 0使能上拉电阻 1禁止上拉电阻
GpioDataRegs.GPCSET.bit.GPIO68=1; GPIO68置高电平
LED1_TOGGLE;就是将翻转寄存器(个人解读)置1使其作用
delay();是一个for循环延时。。。。。。
最后说明,
配置GPIO为输出模式,要控制输出电平有两种方式
1、修改GPxDAT的值
2、修改GPxSET、GPxCLEAR的值
但是在使用GPxDAT连续给两个或两个以上IO口赋值时,会出现第一个或者前几个赋值无效的情况。详解
建议使用GPxSET/GPxCLEAR/GPxTOGGLE,不会出现上述问题
小白一个,有错还请指正