Thread 中讨论的其他器件:EK-TM4C123GXL、
我使用的是 IAR Workbench。 EK-TM4C123GXL launchpad
我编写了代码以获得方波2毫秒周期、50%占空比。
下面的代码工作正常。 我的问题是中断处理程序。 如何添加中断处理程序函数。 我为我的代码添加 了 cstartup_m.c 文件。 是不是添加正确的方法。 如果否、请分享正确的方式。
三、会议的报告 代码.................................................................
#include
#include
#include "inc/tm4c123gh6m.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
volatile uint8_t state=0;
uint32_t freq=0;
空 TIMER0A_Handler (空)
{
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
状态^=GPIO_PIN_1;
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、STY);
}
int main (空)
{
SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlDelay(3);
FREQ = SysCtlClockGet (); // 40MHz
//GPIO 配置
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlDelay(3);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3、0);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
SysCtlDelay(3);
TimerConfigure (TIMER0_BASE、TIMER_CFG_A_PERIODICASE);
TimerLoadSet (TIMER0_BASE、TIMER_A、39999); //持续1ms
IntMasterEnable();
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
IntEnable (INT_TIMER0A);
TimerEnable (TIMER0_BASE、TIMER_A);
while (1){
}
}
................................................................................................................................
三、会议的报告 cstartup_m.c ........................................................................
/********
*
*此文件包含一个用 C 语言编写的 Cortex-M 的中断向量
*实际的中断函数必须由应用程序开发人员提供。
*
*版权所有2007 IAR Systems。 保留所有权利。
*
*$Revision:66254 $
*
(二 /
#pragma language=extended
#pragma 段="CSTACK"
extern void __IAR_program_start( void );
extern void NMI_Handler( void );
extern void HardFault_Handler( void );
extern void MemManage_Handler( void );
extern void BusFault_Handler( void );
extern void UsageFault_Handler( void );
extern void SVC_Handler (void);
extern void DebugMon_Handler (void);
extern void PendSV_Handler (void);
extern void SysTick 处理程序( void );
//..........................................................................
extern void TIMER0A_Handler( void ); //********
//..........................................................................
typedef void (* intfunc)(void);
typedef union{intfunc __funk;void *__ptr;}intvec_elem;
//矢量表通常位于地址0。
//在 RAM 中调试时、它可以位于 RAM 中、至少对齐到2^6。
//如果您需要定义中断服务例程,
//复制此文件并将其包含在项目中。
//名称"_vector_table"对于 C-SPY 具有特殊意义
//是查找 SP 起始值的位置。
//如果向量表不在地址0,用户必须初始化
//使用中断前的 NVIC 矢量表寄存器(VTOR)。
#pragma LOCATION =".intvec"
const intvec_elem __vector_table[]=
{
{.__ptr =__SFE ("CSTACK")},
_IAR_program_start、
NMI_Handler、
HardFault_Handler、
MemManage_Handler、
BusFault_Handler、
使用 Fault_Handler、
0、
0、
0、
0、
Svc_Handler、
DebugMon_Handler、
0、
PendSV_Handler、
SysTick 处理程序、
//..........................................................................
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
0、
TIMER0A_Handler //********
//..........................................................................
};
#pragma call_graph_root ="中断"
__weak void NMI_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void HardFault_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void MemManage_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void BusFault_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void UsageFault_Handler( void ){ while (1){}
#pragma call_graph_root ="中断"
__weak void SVC_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void DebugMON_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void PendSV_Handler( void ){ while (1){}}
#pragma call_graph_root ="中断"
__weak void SysTick 处理程序( void ){ while (1){}}
//..........................................................................
#pragma call_graph_root ="中断"
__weak void TIMER0A_Handler( void ){ while (1){}// ********
//..........................................................................
void __cmain( void );
__weak void __IAR_init_core (void);
__weak void __IAR_init_vfp (void);
#pragma 必需='_vector_table
void __IAR_program_start( void )
{
__IAR_init_core();
_IAR_init_vfp ();
__cmain();
}
................................................................................................................................