程序说明
- 文件名:main.c
- 描 述:DSP-28027GPIO实验
- 版本号:v1.0.0
- 型 号:DSP-28027
实验内容
- 将GPIO1设置为EPWM1B,将GPIO3设置为EPWM2B,将GPIO2和GPIO4设置为GPIO
- 每0.5秒将GPIO4的输出值反转(初始为“0”),上述功能在定时器工程中实现(输出值翻转用寄存器GPxTOGGLE 实现)
实验笔记
GPIO包括多种控制寄存器:
GPAMUX为多路选择控制寄存器;
GPADIR为方向选择控制寄存器;
GPAPUD为上拉电阻选择控制寄存器;
GPACTRL为控制寄存器,用于I/O信号的采样周期设置;
GPASEL为输入限制控制寄存器,用于输入限制方式选择;
GPIOXINTxSEL为中断控制寄存器;GPIOLPMSEL为低功耗模式下唤醒源;
GPxTOGGLE的作用为将对应的GPIO位置的电平反转,即对GPxTOGGLE的某位写入“1”会使得对应的GPIO引脚的电平反转(原先是“0”则变为“1”,原先是“1”则变为“0”)而不影响其他的GPIO引脚;
GPxSET,其位都对应一个GPIO,对GPxSET的某位写入“1”会使得对应的GPIO引脚置“1”(高电平),且不影响其他的GPIO引脚。对GPxSET写“0”无作用,读此GPxSET寄存器返回值都为“0”;
GPxCLEAR的作用为将对应的GPIO位置为“0”(低电平),同样,对GPxCLEAR的某位写入“1”会使得对应的GPIO引脚置“0”而不影响其他的GPIO引脚
寄存器GPxCLEAR的作用为将对应的GPIO位置为“0”(低电平),同样,对GPxCLEAR的某位写入“1”会使得对应的GPIO引脚置“0”而不影响其他的GPIO引脚
程序代码
任务一
void Gpio_setup3(void)
{
EALLOW;
// 将 GPIO1-GPIO3配置为PWM
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // 使能上拉
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; // 使能上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; // GPIO1 = PWM1B
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; // GPIO3 = PWM2B
// 将GPIO2和4设置成GPIO
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0; // 使能上拉
GpioDataRegs.GPASET.bit.GPIO2 = 1; // 置为“1”
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // 配置为GPIO
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1; // 配置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // 使能上拉
GpioDataRegs.GPASET.bit.GPIO4 = 1; // 置为“1”
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // 配置为GPIO
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1; // 配置为输出
EDIS;
}
任务二
1、配置定时器周期
ConfigCpuTimer(&CpuTimer2, 60, 500000);//设置周期为0.5s
2、配置GPIO模式
void InitIO(void)
{
EALLOW; // 关闭寄存器保护,可以修改寄存器
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0; // 使能上拉
GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; // 置为“0”
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; // 配置为GPIO
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1; // 配置为输出
EDIS; // 开启寄存器保护,不可以修改寄存器
}
3、配置定时器中断函数
interrupt void cpu_timer2_isr(void)
{
GpioDataRegs.GPATOGGLE.bit.GPIO4 = 1; // 输出反转
}