请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:EK-TM4C123GXL 工具/软件:TI C/C++编译器
下面的代码将点亮红色 LED 并等待10秒。 当我在 code composer 上运行此函数时,它会打开红色 LED 并进入 FaultIsr()中的无限循环;
//定时 C/asm 混合示例
// Jason Losh
//---------------
//硬件目标
///-------------------------------------------------------
//目标平台:EK-TM4C123GXL 评估板
//目标统一通信: TM4C123GH6PM
//系统时钟:40MHz
//硬件配置:
//红色 LED:
// PF1驱动一个为红色 LED 供电的 NPN 晶体管
/../../-----------
//器件包括、定义和汇编器指令
//-----------------
#include
#include
#include "tm4c123ghp6.h"
//位带别名
#define RED_LED (*(volatile uint32_t *)(0x42000000 +(0x400253FC-0x40000000)*32 + 1*4))//
端口 F 掩码
#define RED_LED_MASK 2
//-----------
//子例程
///-------------------------------------------------------
//初始化硬件
void initHw()
{
//将 HW 配置为与16MHz XTAL 配合使用,启用 PLL,sysdivider 5,创建40MHz 的系统时钟
SYSCTL_RCC_R = SYSCTL_RCC_XTAL_16MHz | SYSCTL_RCC_OSCSRC_MAIN | SYSCTL_RCC_USESYSDIV |(4 << SYSCTL_RCC_SYSDIV_S);
//将 GPIO 端口设置为使用 APB (由于默认配置不需要,为了清晰起见)
SYSCTL_GPIOHBCTL_R = 0;
//启用时钟
SYSCTL_RCGCGPIO_R |= SYSCTL_RCGCGPIO_R5;
_delay_cycles (3);
//配置 LED 引脚
GPIO_PORTF_DIR_R |= RED_LED_MASK;//使位成为输出
GPIO_PORTF_DR2R_= RED_LED_MASK;//将驱动强度设置为2mA (由于默认配置不需要-为了清晰起见)
GPIO_PORTF_DEN_R |= RED_LED_MASK;//启用 LED
}
//近似忙等待(以微秒为单位),给定40MHz 系统时钟
空 wait10Second ()
{
//2以上时钟
_asm (".const");
_asm ("time .field 99999999999999");//10000微秒、即10秒
_asm ("prep: LDR R0、时间");//2个时钟用于此频率
_asm ("loop: ");
_asm (" Sub R0、#1");//N times
_asm (" CBZ R0、完成");//(n-1)+ 3
_asm (" b loop");//(n-1)*2
_asm ("完成: BX lr ");
//2以下时钟
}//------------------
//主要
///--------------------------------------------------------------------------------------------------
int main (void)
{
//初始化硬件
inithw();
//每秒切换红色 LED
while (true)
{
RED_LED ^= 1;
wait10Second ();
}
}