LED:利用通用定时器定时闪烁

摘自:http://bbs.21ic.com/icview-619750-1-1.html

F28335有三种32位的I/O口,依次PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),这些口都可以配置为普通的数字IO口同样也能被配置为外部接口。这样涉及到了IO的寄存器,IO口共有三类寄存器:控制寄存器、数据寄存器和中断控制寄存器。

1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;
2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉
3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样还是6周期采样或者不用采样;GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,
4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出; 当GPIO配置为数字I/O时注意:28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.28335引脚作为输入时,采集外部相应引脚的高低电平,只要读取GPADAT或GPBDAT的相应位即可。在有些场合高频干扰会使I/O引脚的读入产生误码。为了避免这种现象,28335引入了采样时间的概念,采样时间可以通过GPxCTRL与GPxQSEL1/2设置为systemclock的倍数(100MHz的频率,最小采样时间为10ns,最大采样时间为5.1us.)


#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"

#define   LED4  GpioDataRegs.GPADAT.bit.GPIO0
#define   LED3  GpioDataRegs.GPADAT.bit.GPIO1
#define   LED1  GpioDataRegs.GPADAT.bit.GPIO6
#define   LED2  GpioDataRegs.GPADAT.bit.GPIO7


void delay();
interrupt void cpu_timer0_isr();
void configled();

void main(void)
{
    InitSysCtrl();
    DINT;
    InitPieCtrl();

    InitXintf16Gpio();

    IER=0x0000;
    IER=0x0000;

    EALLOW;
    PieVectTable.TINT0=&cpu_timer0_isr;     //中断向量指向中断服务子程序处
    EDIS;

    InitCpuTimers();
    ConfigCpuTimer(&CpuTimer0,100,1000000);
    StartCpuTimer0();
    CpuTimer0Regs.TCR.bit.TIE=1;

    IER|=M_INT1;                //使能CPU级中断
    PieCtrlRegs.PIECTRL.bit.ENPIE=1;        //使能PIE模块
    PieCtrlRegs.PIEIER1.bit.INTx7=1;        //使能第1组的第7位中断
    EINT;                       //使能全局中断
    ERTM;

    configled();
    LED1=1;
    delay();
    LED2=1;
    delay();
    LED3=0;
    delay();
    LED4=0;
    delay();
    for(;;);



}

void delay()
{
    Uint16 i;
    for(i=0;i<1000;i++)
        ;

}

interrupt void cpu_timer0_isr()
{

    PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;       //允许继续响应中断
    CpuTimer0Regs.TCR.bit.TIF=1;                //清除中断标志位
    CpuTimer0Regs.TCR.bit.TRB=1;                //定时器自动装载

    LED1=~LED1;
    LED2=~LED2;
    LED3=~LED3;
    LED4=~LED4;
}

void configled()
{
    EALLOW;
    //GPIO控制类寄存器
    GpioCtrlRegs.GPAMUX1.bit.GPIO0= 0;          //GPIO0设置为普通IO口
    GpioCtrlRegs.GPADIR.bit.GPIO0=1;            //GPIO0设置为输出
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
    EDIS;

}

附:

a.引脚复用

这里写图片描述
这里写图片描述
这里写图片描述

b.中断映射

这里写图片描述

c.片内外设时钟控制

各片内外设的时钟可以通过外设时钟控制器PCLKCR0/1/2独立使能。

注:复位时,HSCLK的默认频率为f.SYSCLKOUT/2,而LSPCLK的默认频率为f.SYSCLKOUT/4.

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值