主题中讨论的其他器件:SW-TM4C
工具/软件:Code Composer Studio
你好
我的问题是、当我恢复程序时、它会在下面照片中显示的这个无限循环中残留
这是程序
#define led (*(volatile unsigned long *) 0x40025008)// BF1红色 LED
#define sw1sw2 (*(volatile unsigned long *) 0x40025044)// PF4 SW1 & PFO SW2
#define GPIO_PORTF_DIR_R (*(volatile unsigned long *) 0x40025400)
#define GPIO_PORTF_AFSEL_R (*(volatile unsigned long *) 0x40025420)
#define GPIO_PORTF_PUR_R (*(volatile unsigned long *) 0x40025510)
#define GPIO_PORTF_DEN_R (*(volatile unsigned long *) 0x4002551C)
#define GPIO_PORTF_LOCK_R (*(volatile unsigned long *) 0x40025520)
#define GPIO_PORTF_CR_R (*(volatile unsigned long *) 0x40025524)
#define GPIO_PORTF_AMSEL_R (*(volatile unsigned long *) 0x40025528)
#define GPIO_PORTF_PCTL_R (*(volatile unsigned long *) 0x4002552C)
#define SYSCTL_RCGC2_R (*(volatile unsigned long *) 0x400FE108)
// SysTick 计时器
#define NVIC_ST_CTRL_R (*(volatile unsigned long *) 0XE000E010)
#define NVIC_ST_RELOAD_R (*(volatile unsigned long *) 0XE000E014)
#define NVIC_ST_CURRENT_R (*(volatile unsigned long *) 0XE000E018)
void init (void){
volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000020;// 1)激活端口 F 的时钟
延迟= SYSCTL_RCGC2_R;//允许时钟启动的时间
GPIO_PORTF_LOCK_R = 0x4C4F434B;// 2)解锁 GPIO 端口 F
GPIO_PORTF_CR_R |= 0x13;//允许更改 PF1、PF4和 PF0
GPIO_PORTF_AMSEL_R &=~0x13;// 3)禁用 PF1、PF4和 PF0上的模拟
GPIO_PORTF_PCTL_R &=~0x000F00FF;// 4) PF1和 PF4AND PF0上的 PCTL GPIO
GPIO_PORTF_DIR_R |= 0x02;// 5) PF4、PF0输入(开关)、PF3 -1输出-> 0x 0000 1110 (LED)
GPIO_PORTF_DIR_R &=~0x11;
GPIO_PORTF_PUR_|= 0x11;
GPIO_PORTF_AFSEL_R &=~0x13;// 6)禁用 PF7-0上的 alt funt
GPIO_PORTF_DEN_R |= 0x13;// 7)在 PF1上启用数字 I/O
}
void SysTick (void){
NVIC_ST_CTRL_R &=~0x01;//禁用 SysTick 计时器
NVIC_ST_RELOAD_R= 0x00FFFFFF;//初始化 RELOAD 寄存器值
NVIC_ST_CURRENT_R= 0xAA;//将任何值放入当前寄存器以将其复位
NVIC_ST_CTRL_R = 0x05;//选择系统时钟(16MHz)//禁用中断//启用计数器,使其开始计时
}
void delay (void){
无符号长整型计数;
计数= 79999;//以10Hz 的频率振荡
while (count){
计数--;
}
}
void main (void){
init();
SysTick ();
LED=0x02;
unsigned long start、end;
unsigned long i=0;
浮点时间[50];
无符号长整型状态[50];
无符号长整型开关[50];
无符号超长整型精确度=799105;
unsigned int error=0;
while (1){
if (sw1sw2!=0x11)
{
LED = LED ^ 0x02;
START =NVIC_ST_CURRENT_R;
delay();
END=NVIC_ST_CURRENT_R;
如果(i<50)
{
TIME[i]=(开始-结束)*0.0000000625;
STATE [I]=LED&0x02;
switches[i]= sw1sw2 & 0x11;
如果((开始-结束)<879015||(开始-结束)>719194)
{error ++;}
i++;
}
}
其他
LED=0;
}
}