Other Parts Discussed in Thread: TMDSHSECDOCK, C2000WARE
主题中讨论的其他器件:C2000WARE
控制器-TMS320F28388D
集线站- TMDSHSECDOCK
PLZ 告诉我用于制作基于中断的计时器程序的编程代码、以每1/2秒切换一次 LED
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: TMDSHSECDOCK, C2000WARE
控制器-TMS320F28388D
集线站- TMDSHSECDOCK
PLZ 告诉我用于制作基于中断的计时器程序的编程代码、以每1/2秒切换一次 LED
您好、Abhishek、
您是否看过 C2000WARE 中的示例?
有一个 LED 示例(C:\ti\c2000\C2000Ware_x\device_support\f2838x\examples\cPU1\led)和一个执行计时器中断的示例(C:\ti\c2000Ware_x\device_support\f2838x\examples\cPU1\timer)
这两个示例可以与执行所需操作的细微修改结合在一起。
此致、
Marlyn
您好、Abhishek、
要了解如何正确配置中断、请参阅技术参考手册的"外设中断"部分。
计时器的所有配置都可以保持不变,期望将周期从一秒更改为1/2秒;这在 ConfigCpuTimer()函数中发生了变化。 确保也在 main()中添加 GPIO 引脚的配置。
每隔0.5秒就会发生一次中断。 在中断服务例程(ISR)中 、您可以更改 LED 的状态(我标记了以下位置)。 我建议只需切换 LED 值、这样每当 ISR 执行 LED 的状态时、LED 的状态就会改变。
请告诉我这是否仍然不清楚、或者您有任何具体问题、我很乐意帮助您解决。
//您可能只需要一个计时器中断,所以我保留了计时器0
//
////函数原型-这声明将用于中断
的函数//
__interrupt void cpuTimer0ISR (void);
//
// Main
//
void main (void)
{
//
//初始化设备时钟和外设
//
InitSysCtrl();
//
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//
InitPieCtrl();
//
//禁用 CPU 中断并清除所有 CPU 中断标志
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)
//
InitPieVectTable();
//
//映射 ISR 函数
//
EALLOW;
PieVectTable.TIMER0_INT =&cpuTimer0ISR;
EDIS;
//Initialize/Configure 此处是 GPIO 引脚
//
//初始化设备外设。 对于本示例、仅初始化
// CPU 定时器。
//
InitCpuTimer();
//
//将 CPU 定时器0配置为每1/2秒中断一次:
// 200MHz:CPU 频率、周期:以 μ 秒为单位)
//
ConfigCpuTimer (&CpuTimer0、200、50000);
//
//为了确保精确的时序,请使用只写指令来写入
//整个寄存器。 因此、如果任何配置位发生更改
//在 ConfigCpuTimer 和 InitCpuTimers 中,还必须进行以下设置
//更新。
//
CpuTimer0Regs.TCR.ALL = 0x4000;
//
//启用连接到 CPU 定时器0的 CPU INT1
//
IER |= M_INT1;
//
//在 PIE 中启用 TINT0:组1中断7
//
PieCtrlRegs.PIEIER1.bit.INTx7=1;
//
//启用全局中断和更高优先级的实时调试事件
//
EINT;
ERTM;
//
//空闲循环。 只需坐下来循环(可选)。
//
while (1)
{
}
}
//
// cpuTimer0ISR -具有中断计数器
的 CPU Timer0 ISR //
__interrupt void cpuTimer0ISR (void)
{
//在此处切换 LED 的值
//
//确认此中断以从组1接收更多中断
//
PieCtrlRegs.PIEACK.all = PIEACK_Group1;
}
//
//文件结束
//
此致、
Marlyn