我目前正在处理 UART 和计时器。 UART 器件运行正常、但当我在同一代码中引入计时器时、UART 停止工作。 问题可能出在哪呢?
/* U0Rx 接收连接到 PA0
连接到 PA1的 U0Tx 发送*
#include
#include
#include "tm4c123ghp6.h"
void UART_Init (void);
void PortF_Init (void);
void Porte Init (void);
void Timer_Init (void);
int main (空)
{
volatile unsigned long delay_timer=0;
字符 c;
PortF_Init();
UART_Init();
Porte Init();
/*这是计时器初始化部分。 取消注释任何语句都会停止 UART*/的工作
// sysctl_RCGC1_R |= 0x00010000;//启用计时器块0的时钟(第460页)
// delay_timer = SYSCTL_RCGC1_R;// 3-4个时钟周期的延迟
// TIMER0_CTL_R = 0x00;//初始化前禁用 Timer0 (第737页)
// TIMER0_CFG_R = 0x00;// 32位选项(pg 727)
// TIMER0_TAMR_= 0x01;//一次性模式和递减计数器(pg 729)
// TIMER0_ICR_R = 0x01;//清除 TimerA 超时标志(第754页)
/* UART 部分*/
while (1){
while ((UART0_FR_R & 0x00000010)!= 0)
{
}
C=UART0_DR_R;
如果(c==10)
{
GPIO_PORTF_DATA_R = 0x08;
UART0_DR_R=c;
UART0_FR_R=0x00000080;
while (((UART0_FR_R&0x00000008)==1)
{
}
}
如果(c==01)
{
GPIO_PORTF_DATA_R = 0x04;
UART0_DR_R=c;
UART0_FR_R=0x00000080;
while (((UART0_FR_R&0x00000008)==1)
{
}
}
如果(c==00)
{
GPIO_PORTF_DATA_R = 0x00;
UART0_DR_R=c;
UART0_FR_R=0x00000080;
while (((UART0_FR_R&0x00000008)==1)
{
}
}
}
}
/* UART_Init*/
空 UART_Init (空)
{
SYSCTL_RCGCUART_R |= 0x01;//激活 UART0 *
SYSCTL_RCGC2_R |= 0x01;//激活端口 A */
UART0_CTL_R = 0x00000000;//禁用 UART */
UART0_IBRD_R = 104;// IBRD = int (16、000、000 /(16 * 9600))= int (104.1667)*
UART0_FBRD_R = 11;/* FBRD = ROUND (0.1667 * 64)= 11 */
UART0_LCRH_R = 0x70;// 8位字长(无奇偶校验位、一个停止位、FIFO)*/
UART0_CTL_R = 0x0301;//启用 UART、RXE、TXE、LBE *
GPIO_Porta_AFSEL_R |= 0x03;//在 PA1-0上启用 alt funt */
GPIO_PORta_den_R |= 0x03;//在 PA1-0上启用数字 I/O */
GPIO_Porta_PCTL_R =((GPIO_Porta_PCTL_R 和0xFFFFFF00)+0x00000011);//将 PA1-0配置为 UART */
GPIO_PORta_AMSEL_R &=~0x03;/*禁用 PA 上的模拟功能*
}
void PortF_Init (void){volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000020;// 1) F 时钟
延迟= SYSCTL_RCGC2_R;//延迟
GPIO_PORTF_LOCK_R = 0x4C4F434B;// 2)解锁 PortF PF0
GPIO_PORTF_CR_R = 0x0E;//允许更改为 PF4-0
GPIO_PORTF_AMSEL_R = 0x00;// 3)禁用模拟功能
GPIO_PORTF_PCTL_R = 0x00000000;// 4) GPIO 清零位 PCTL
GPIO_PORTF_DIR_= 0x0E;// 5) PF4、PF0输入、PF3、PF2、PF1输出
GPIO_PORTF_AFSEL_R = 0x00;// 6)无备用功能
GPIO_PORTF_DEN_R = 0x0E;// 7)启用数字引脚 PF4-PF0
}
void Porte Init (void){volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000010;// 1) E 时钟
延迟= SYSCTL_RCGC2_R;//延迟
GPIO_Porte _LOCK_R = 0x4C4F434B;// 2)解锁
GPIO_Porte _CR_R = 0x06;//允许更改 PE2-1
GPIO_Porte _AMSEL_R = 0x00;// 3)禁用模拟功能
GPIO_Porte _PCTL_R = 0x00000000;// 4) GPIO 清零位 PCTL
GPIO_Porte _DIR_= 0x06;// 5) PE2-1输出
GPIO_Porte _AFSEL_R = 0x00;// 6)无备用功能
GPIO_Porte _PUR_= 0x06;//启用上拉电阻
GPIO_Porte _DEN_R = 0x06;// 7)使能数字引脚
}