打印
[DSP编程]

定时器控制LED灯

[复制链接]
1476|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
0803lialong|  楼主 | 2014-4-7 15:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原程序控制I/O口0-3,我现在仅改了I/O改为4-7,结果4,5灯正常亮,6和7就是不亮,不知道咋回事,是不是还要改其它地方。硬件没问题的。
源程序:
#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

// Prototype statements for functions found within this file.
interrupt void cpu_timer0_isr(void);
unsigned int Count,Flag;     
void main(void)
{

// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
   InitSysCtrl();

// Step 2. Initalize GPIO:
// This example function is found in the DSP2833x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();  // Skipped for this example


// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
   DINT;      
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.
   InitPieCtrl();   
// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;            
   IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.  This is useful for debug purposes.
// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.
   InitPieVectTable();   
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
   EALLOW;  // This is needed to write to EALLOW protected registers
   PieVectTable.TINT0 = &cpu_timer0_isr;   
   Count = 0;                                       
   Flag=0;

   EDIS;    // This is needed to disable write to EALLOW protected registers

// Step 4. Initialize the Device Peripheral. This function can be
//         found in DSP2833x_CpuTimers.c
   InitCpuTimers();   // For this example, only initialize the Cpu Timers   
#if (CPU_FRQ_150MHZ)   
// Configure CPU-Timer 0 to interrupt every 500 milliseconds:
// 150MHz CPU Freq, 50 millisecond Period (in uSeconds)
   ConfigCpuTimer(&CpuTimer0, 150, 500000);  
#endif
#if (CPU_FRQ_100MHZ)
// Configure CPU-Timer 0 to interrupt every 500 milliseconds:
// 100MHz CPU Freq, 50 millisecond Period (in uSeconds)
   ConfigCpuTimer(&CpuTimer0, 100, 500000);
#endif

// To ensure precise timing, use write-only instructions to write to the entire register. Therefore, if any
// of the configuration bits are changed in ConfigCpuTimer and InitCpuTimers (in DSP2833x_CpuTimers.h), the
// below settings must also be updated.

   CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0   
// Step 5. User specific code, enable interrupts:

// Configure GPIO0-3 as a GPIO output pin
   EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;  
   GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;   
   GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
   EDIS;

// Enable CPU INT1 which is connected to CPU-Timer 0:
   IER |= M_INT1;  
// Enable TINT0 in the PIE: Group 1 interrupt 7
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;   

// Enable global Interrupts and higher priority real-time debug events:
   EINT;   // Enable Global interrupt INTM     
   ERTM;   // Enable Global realtime interrupt DBGM

// Step 6. IDLE loop. Just sit and loop forever (optional):
   for(;;);                     
}


interrupt void cpu_timer0_isr(void)
{
   CpuTimer0.InterruptCount++;
   GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
   GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1; // Toggle GPIO1 once per 500 milliseconds
   GpioDataRegs.GPATOGGLE.bit.GPIO2 = 1; // Toggle GPIO2 once per 500 milliseconds
   GpioDataRegs.GPATOGGLE.bit.GPIO3 = 1; // Toggle GPIO3 once per 500 milliseconds
   // Acknowledge this interrupt to receive more interrupts from group 1
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   
}


//===========================================================================
// No more.
//===========================================================================

相关帖子

沙发
wangch_sh| | 2014-4-7 16:59 | 只看该作者
你这是没改过的程序呀!

使用特权

评论回复
板凳
zhangmangui| | 2014-4-7 18:18 | 只看该作者
这个问题   以前看到有人问过
从贴出的代码看  还是配置了GPIO0-3啊

使用特权

评论回复
地板
0803lialong|  楼主 | 2014-4-7 19:09 | 只看该作者
上边是没改的程序
我仅是将GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;  
   GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;   
   GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;

GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1;
   GpioDataRegs.GPATOGGLE.bit.GPIO1 = 1; // Toggle GPIO1 once per 500 milliseconds
   GpioDataRegs.GPATOGGLE.bit.GPIO2 = 1; // Toggle GPIO2 once per 500 milliseconds
   GpioDataRegs.GPATOGGLE.bit.GPIO3 = 1; // Toggle GPIO3 once per 500 milliseconds
改为
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0;  
   GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;   
   GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;
   GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;

GpioDataRegs.GPATOGGLE.bit.GPIO4 = 1;
   GpioDataRegs.GPATOGGLE.bit.GPIO5 = 1; // Toggle GPIO1 once per 500 milliseconds
   GpioDataRegs.GPATOGGLE.bit.GPIO6 = 1; // Toggle GPIO2 once per 500 milliseconds
   GpioDataRegs.GPATOGGLE.bit.GPIO7 = 1; // Toggle GPIO3 once per 500 milliseconds
就出现刚开始的问题,不知道还要改其它地方不。

使用特权

评论回复
5
zhangmangui| | 2014-4-7 22:11 | 只看该作者
0803lialong 发表于 2014-4-7 19:09
上边是没改的程序
我仅是将GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;  
   GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; ...

应该只修改这两个就可以啦
你在看看IO67有没有特殊的功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝