工具/软件:Code Composer Studio
您好!
我的代码中有一个延迟函数、最小步长仅为一微秒。请告诉我、我将如何为较小步长定义我自己的延迟函数。
//包含的文件
//
#include "F28x_Project.h"
//
//定义
//
#define Blinky_LED_GPIO 12.
中断空 XINT1_ISR (空);
void main (void)
{
//
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2837xS_SYSCTRL.c 文件中。
//
InitSysCtrl();
//
//步骤2. 初始化 GPIO:
//此示例函数位于 F2837xS_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
//
InitGpio();
GPIO_SetupPinMux (Blinky_LED_GPIO、GPIO_MUX_CPU1、0);
GPIO_SetupPinOptions (Blinky_LED_GPIO、GPIO_output、GPIO_PushPull);
//
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
//
Dint;
//
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2837xS_PIECTRL.c 文件中。
//
InitPieCtrl();
//
//禁用 CPU 中断并清除所有 CPU 中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_PieVect.c 中找到
//
InitPieVectTable();
//
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
//
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.XINT1_INT =&XINT1_ISR;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
//
//
//在 PIE 中启用 XINT1和 XINT2:组1中断4和5
//启用连接到 WAKEINT 的 INT1:
//
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
PieCtrlRegs.PIEIER1.bit.INTx4 = 1;//启用 PIE 组1 INT4
PieCtrlRegs.PIEIER1.bit.INTx5 = 1;//启用 PIE 组1 INT5
IER |= M_INT1;//启用 CPU INT1
EINT;//启用全局中断
// GPIO14是输入
//
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;// GPIO
GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;//输入
GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 0;// XINT1同步到 SYSCLKOUT
EDIS;
//
// GPIO14是 XINT1
//
GPIO_SetupXINT1Gpio (14);
//
//配置 XINT1
//
XintRegs.XINT1CR.bit.polarity = 1;//上升边沿中断1
//下降沿中断0
//
//启用 XINT1
//
XintRegs.XINT1CR.bit.ENABLE = 1;//启用 XINT1
//
//
//启用全局中断和更高优先级的实时调试事件:
//
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
//
//步骤6. 空闲循环。 只需坐下来循环(可选):
//
for (;;)
{
}
}
//
//我的内部
//
// XINT1_ISR -外部中断1 ISR
//
中断空 XINT1_ISR (空)
{
//
//打开 LED
//
GPIO_WritePin (Blinky_LED_GPIO、0);
//
//延迟一位。
//
DELAY_US (1000*500);
//
//关闭 LED
//
GPIO_WritePin (Blinky_LED_GPIO、1);
//
//延迟一位。
//
DELAY_US (1000*500);
//打开 LED
//
GPIO_WritePin (Blinky_LED_GPIO、0);
//
//延迟一位。
//
DELAY_US (1000*500);
//
//关闭 LED
//
GPIO_WritePin (Blinky_LED_GPIO、1);
//
//延迟一位。
//
DELAY_US (1000*500);
//
//确认此中断以从组1获取更多内容
//
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
}
//
//文件结束
//