This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123GH6PM:UART 中断回传不完整数据

Guru**** 2350610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/611511/tm4c123gh6pm-uart-interrupts-echoing-incomplete-data

器件型号:TM4C123GH6PM

我已经使用 TivaWare 函数在 TM4C 上实现了 UART 中断。

该程序很简单:
-在 UART 上接收到数据时触发中断
接收到的每个字符都在小括号之间回显

因此、如果我要从我的计算机发送"A"、我将返回"{A}"。 示例:  

问题是、当我一次测试发送更长的消息时:前几个字符被回显、然后在某一时刻缺少字符:

示例

请注意、这些示例中的消息是在下面的文本字段中完整写入的、并通过按 Enter 键立即发送。 我这样做是为了模拟通过串行方式以编程方式发送数据、这种情况应尽可能快。

在此示例中,我发送了句子“这是一个发送用于测试的较长句子”:

在此示例中、我发送了'123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-'

 

 

详细信息:


-硬件:使用 Tiva TM4C Launchpad

-在引脚 PA0和 PA1上使用 UART 0

波特率:115200,无奇偶校验,1个停止位,8位字

代码:  

#include 
#include 

#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"


#include "inc/hw_ints.h"



(include void interrupt

)

//
//设置
//
Setup();

while (1){

}
}

//*********
//
// UART 代码
//

void UART0_IntHandler (void){
//
// UART 中断状态
//
uint32_t ui32Status;

//
//获取中断状态
//
ui32Status = UARTIntStatus (UART0_BASE、TRUE);

//
//清除中断标志
//
UARTIntClear (UART0_BASE、ui32Status);

//
//在有字符时循环
//
while (UARTCharsAvail (UART0_BASE){

//
//回显字符
//
UARTCharPutNonBlocking (UART0_BASE、'{');
UARTCharPutNonBlocking (UART0_BASE、UARTCharGetNonBlocking (UART0_BASE));
UARTCharPutNonBlocking (UART0_BASE、'});

}
}


//*********
//
//系统设置代码
//


//// UART 设置功能
//
空 UARTSetup (void){

//********
//
// UART0设置
//

//
//启用 UART 0和 GPIO A 上的时钟
//(UART 0位于引脚 PA0和 PA1上)
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

//
//等待 UART0模块准备就绪。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_UART0))
{
}

//
//为 UART 配置引脚 PA0和 PA1
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0|GPIO_PIN_1);

//
//配置 UART 设置:
// UART:0
//波特率:115200
//字长:8.
//停止位:1.
//奇偶校验:无
//
UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);

//********
//
// UART0中断代码
//

//
//启用 UART0中断
//
IntEnable (INT_UART0);

//
//选择 UART0中断
//
UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT);
}


//
系统设置
//
void setup (void){

//
// UART 设置功能
//
UARTSetup();

//
//启用处理器中断
//
IntMasterEnable();
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    由于 FIFO 已满、写入 FIFO 可能不成功。 您是否收到 FIFO 满标志? 调用 UARTCharPutNonBlocking ()后,请检查返回的值。 如果返回 false、则写入失败、您需要再次重试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Charles、首先、感谢您的回答。

    我按照您的建议,编辑了我发送的部件,如下所示:  

    while (UARTCharsAvail (UART0_BASE)){
    
    //
    回显字符
    //
    while (!UARTCharPutNonBlocking (UART0_BASE、'{'))}{
    falseCount1++;
    }
    
    while (!UARTCharPutNonBlocking (UART0_BASE、UARTCharGetNonBlocking (UART0_BASE))){
    falseCount2++;
    }
    
    while (!UARTCharPutNonBlocking (UART0_BASE、'}){
    falseCount3++;
    }
    

    这里的问题似乎更糟:  

    添加 while 循环以检查传入字符可以解决此新问题,但输出与初始问题相同:  

    //
    //在有字符时循环
    //
    while (UARTCharsAvail (UART0_BASE){
    
    //
    //回显字符
    //
    while (!UARTCharPutNonBlocking (UART0_BASE、'{')){
    falseCount1++;
    }
    
    
    while (!UART0_ReadSuccessful){
    newCharacterIn = UARTCharGetNonBlocking (UART0_BASE);
    UART0_ReadSuccessful =(newCharacterIn =-1?) false:true);
    }
    
    while (!UARTCharPutNonBlocking (UART0_BASE、newCharacterIn){
    falseCount2++;
    }
    
    while (!UARTCharPutNonBlocking (UART0_BASE、'})){
    falseCount3++;
    }
    } 

    有什么提示吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要对读取和写入进行去耦。 对于超过6个字符左右的任何突发、在接收中断内写入输出 FIFO 将失败。 而是接收到缓冲器中并单独传输。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,KMN
    我可以理解你在这里的问题你在终端窗口写一个像你写"1"的东西这是接收到的像这个"{1}"但是你在键入两个或更多字符后收到了......

    解决方案是"FIFO 触发级别为1/8、1/4、1/2、3/4和7/8" 在这里、您可以在1/8/1/4... FIFO 已满...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,KMN 这个计划帮助美国.


    //***** 备选功能选择******* //
    #define AFSELA (*(unsigned volatile long*) 0x40058420)//备用功能选择
    #define AFSELB (*(无符号 volatile long*) 0x40059420)
    #define AFSELC (*((unsigned volatile long*) 0x4005A420)
    #define AFSELD (*(无符号 volatile long*) 0x4005B420)
    #define AFSELE (*(无符号 volatile long*) 0x4005C420)
    #define AFSELF (*(无符号 volatile long*) 0x4005D420)
    #define AFSELG (*(无符号 volatile long*) 0x4005E420)
    #define AFSELH (*(无符号 volatile long*) 0x4005F420)
    #define AFSELJ (*(无符号 volatile long*) 0x40060420)
    #define AFSELK (*(无符号 volatile long*) 0x40061420)
    #define AFSELL (*(无符号 volatile long*) 0x40062420)
    #define AFSELM (*(unsigned volatile long*) 0x40063420)
    #define AFELN (*(无符号 volatile long*) 0x40064420)
    #define AFSELP (*(无符号 volatile long*) 0x40065420)
    #define AFSELQ (*((unsigned volatile long*) 0x40066420))

    /***** 数字启用******* //
    #define Dena (*(unsigned volatile long*) 0x4005851C)//数字使能端口 A
    #define DENB (*(无符号 volatile long*) 0x4005951C)
    #define DENC (*(无符号 volatile long*) 0x4005A51C)
    #define DEND (*(无符号 volatile long*) 0x4005B51C)
    #define Dene (*(unsigned volatile long*) 0x4005C51C)
    #define DENF (*(无符号 volatile long*) 0x4005D51C)
    #define Deng (*(无符号 volatile long*) 0x4005E51C)
    #define 增强型(*(无符号 volatile long*) 0x4005F51C)
    #define DENJ (*(无符号 volatile long*) 0x4006051C)
    #define Denk (*(无符号 volatile long*) 0x4006151C)
    #define DENL (*(无符号 volatile long*) 0x4006251C)
    #define DENM (*(无符号 volatile long*) 0x4006351C)
    #define Denn (*(unsigned volatile long*) 0x4006451C)
    #define DENP (*(无符号 volatile long*) 0x4006551C)
    #define DENQ (*(无符号 volatile long*) 0x4006651C)

    /***** 模拟模式选择寄存器(AMSEL)、偏移量0x528 **//
    #define AMSELA (*(无符号易失性 long*) 0x40058528)
    #define AMSELB (*(无符号 volatile long*) 0x40059528)
    #define AMSELC (*((unsigned volatile long*) 0x4005A528)
    #define AMSELD (*(unsigned volatile long*) 0x4005B528)
    #define AMSELE (*(无符号 volatile long*) 0x4005C528)
    #define AMSELF (*(unsigned volatile long*) 0x4005D528)
    #define AMSELG (*(unsigned volatile long*) 0x4005E528)
    #define AMSELH (*(无符号 volatile long*) 0x4005F528)
    #define AMSELJ (*(无符号 volatile long*) 0x40060528)
    #define AMSELK (*(无符号 volatile long*) 0x40061528)
    #define AMSELL (*(无符号 volatile long*) 0x40062528)
    #define AMSELM (*(unsigned volatile long*) 0x40063528)
    #define AMSELN (*(无符号 volatile long*) 0x40064528)
    #define AMSELP (*(无符号 volatile long*) 0x40065528)
    #define AMSELQ (*(unsigned volatile long*) 0x40066528)

    //***** 输入输出(DIR)***** //
    #define Dira (*((unsigned volatile long*) 0x40058400)//方向 PG-760
    #define DirB (*(无符号 volatile long*) 0x40059400)
    #define DIRC (*(无符号 volatile long*) 0x4005A400)
    #define DID (*((unsigned volatile long*) 0x4005B400))
    #define define define (*(无符号 volatile long*) 0x4005C400)
    #define DIRF (*(无符号 volatile long*) 0x4005D400)
    #define DIAG (*(无符号 volatile long*) 0x4005E400)
    #define DIRH (*(无符号 volatile long*) 0x4005F400)
    #define DIRJ (*(无符号 volatile long*) 0x40060400)
    #define Dirk (*(无符号 volatile long*) 0x40061400)
    #define DILL (*(无符号 volatile long*) 0x40062400)
    #define DIRM (*(无符号 volatile long*) 0x40063400)
    #define DIRN (*(无符号 volatile long*) 0x40064400)
    #define DIRP (*(无符号 volatile long*) 0x40065400)
    #define DIRQ (*(无符号 volatile long*) 0x40066400)

    //******** 数据(数据)*** [9-2]/
    #define dataaa (*(unsigned volatile long*) 0x400583FC)//数据 PG-759
    #define DATAB (*((unsigned volatile long*) 0x400593FC)
    #define DATAC (*((unsigned volatile long*) 0x4005A3FC)
    #define DATAD (*((unsigned volatile long*) 0x4005B3FC)
    #define DATAE (*((unsigned volatile long*) 0x4005C3FC)
    #define DATAF (*((unsigned volatile long*) 0x4005D3FC)
    #define DATAG (*(unsigned volatile long*) 0x4005E3FC)
    #define DATAH (*((unsigned volatile long*) 0x4005F3FC)
    #define DATAJ (*((无符号 volatile long*) 0x400603FC)
    #define DATAK (*(无符号 volatile long*) 0x400613FC)
    #define DATAL (*((unsigned volatile long*) 0x400623FC)
    #define DATAM (*((unsigned volatile long*) 0x400633FC)
    #define Datan (*(unsigned volatile long*) 0x400643FC)
    #define DATAP (*((unsigned volatile long*) 0x400653FC)
    #define DATAQ (*(无符号 volatile long*) 0x400663FC)

    //////// ***** 端口控制***** //////////////////
    #define PCTLA (*(unsigned volatile long*) 0x4005852C)// Porta Control
    #define PCTLB (*(unsigned volatile long*) 0x4005952C)
    #define PCTLC (*(unsigned volatile long*) 0x4005A52C)
    #define PCTLD (*(unsigned volatile long*) 0x4005B52C)
    #define PCTLE (*(unsigned volatile long*) 0x4005C52C)
    #define PCTLF (*(unsigned volatile long*) 0x4005D52C)
    #define PCTLG (*(unsigned volatile long*) 0x4005E52C)
    #define PCTLH (*(unsigned volatile long*) 0x4005F52C)
    #define PCTLJ (*(unsigned volatile long*) 0x4006052C)
    #define PCTLK (*(无符号 volatile long*) 0x4006152C)
    #define PCTLL (*(无符号 volatile long*) 0x4006252C)
    #define PCTLM (*(unsigned volatile long*) 0x4006352C)
    #define PCTLN (*(unsigned volatile long*) 0x4006452C)
    #define PCTLP (*(无符号易失性 long*) 0x4006552C)
    #define PCTLQ (*(unsigned volatile long*) 0x4006652C)

    //////// ***** 锁定控制***要解锁,请输入0x4C4F434B* PG-777//
    #define LOCKA (*(unsigned volatile long*) 0x40058520)//pg777锁定
    #define LOCKB (*(无符号 volatile long*) 0x40059520)
    #define LOCKC (*(unsigned volatile long*) 0x4005A520)
    #define lockd (*(unsigned volatile long*) 0x4005B520)
    #define Locke (*((unsigned volatile long*) 0x4005C520)
    #define LOCKF (*(unsigned volatile long*) 0x4005D520)
    #define LOCKG (*(无符号 volatile long*) 0x4005E520)
    #define LOCKH (*(unsigned volatile long*) 0x4005F520)
    #define LOCKJ (*(unsigned volatile long*) 0x40060520)
    #define LOCKK (*(无符号 volatile long*) 0x40061520)
    #define LOCKL (*(无符号 volatile long*) 0x40062520)
    #define LOCKM (*(unsigned volatile long*) 0x40063520)
    #define LOCKN (*(unsigned volatile long*) 0x40064520)
    #define LOCKP (*(无符号 volatile long*) 0x40065520)
    #define LOCKQ (*(unsigned volatile long*) 0x40066520)


    /***** 为单个端口提供时钟**** //
    //[0-A-A、1-B、...14-Q]//

    #define RCGCGPIO (*(unsigned volatile long*) 0x400FE608)//时钟提供 PG-382
    ////////////////////////////////////////////////////////////////////////////////////////////////////


    #define PURJ (*(unsigned volatile long*) 0x40060510)//上拉电阻器

    ////////////////// ***** UART0 ******** ///////////////////////////////////
    #define RCGCUART (*((unsigned volatile long*) 0x400FE618))//UART 获取 UARt0 0x01的 CLK PG-385
    #define UARTCTL (*(unsigned volatile long*) 0x4000C030)//UART 控制 PG-1182
    #define UARTIBRD (*(unsigned volatile long*) 0x4000C024)//波特率整数 PG-1178
    #define UARTFBRD (*(unsigned volatile long*) 0x4000C028)//波特率小数 PG-1179
    #define UARTLCRH (*(unsigned volatile long*) 0x4000C02C)/UART 线控页1180
    #define UARTCC (*(unsigned volatile long*) 0x4000CFC8)/UART 时钟配置 PG-1207
    #define UARTDR (*(unsigned volatile long*) 0x4000C000)/UART 数据 PG-1169
    #define UARTFR (*(unsigned volatile long*) 0x4000C018)/UART INTRRUPT PG-1174
    #define UARTIM (*(unsigned volatile long*) 0x4000C038)//UART INT 掩码
    #define UARTICR (*(unsigned volatile long*) 0x4000C044)//INT CLEAR PG-1200
    #define UARTRIS (*(unsigned volatile long*) 0x4000C03C)
    #define UARTIFLS (*(无符号易失性 long*) 0x4000C034)/UART 中断 FIFO 深度选择
    //////////////////////// ***** ADC****** ////////////////
    #define RCGCADC (*(unsigned volatile long*) 0x400FE638)//提供选择的 ADC 时钟
    //
    //
    // ADC 寄存器(ADC0)
    //
    //
    #define ADC0ACTSS (*((unsigned volatile long*) 0x40038000))
    #define ADC0RIS (*((unsigned volatile long*) 0x40038004))
    #define ADC0IM (*((unsigned volatile long*) 0x40038008)
    #define ADC0ISC (*((unsigned volatile long*) 0x4003800C))
    #define ADC0OSTAT (*((unsigned volatile long*) 0x40038010))
    #define ADC0EMUX (*((unsigned volatile long*) 0x40038014))
    #define ADC0USTAT (*((unsigned volatile long*) 0x40038018))
    #define ADC0TSSEL (*((unsigned volatile long*) 0x4003801C)
    #define ADC0SSPRI (*((unsigned volatile long*) 0x40038020))
    #define ADC0SPC (*((unsigned volatile long*) 0x40038024))
    #define ADC0PSSI (*((unsigned volatile long*) 0x40038028))
    #define ADC0SAC (*((unsigned volatile long*) 0x40038030))
    #define ADC0DCISC (*((unsigned volatile long*) 0x40038034))
    #define ADC0CTL (*((unsigned volatile long*) 0x40038038))
    #define ADC0SSMUX0 (*((unsigned volatile long*) 0x40038040))
    #define ADC0SSCTL0 (*((unsigned volatile long*) 0x40038044)
    #define ADC0SSFIFO0 (*((unsigned volatile long*) 0x40038048))
    #define ADC0SSFSTAT0 (*((unsigned volatile long*) 0x4003804C))
    #define ADC0SSOP0 (*((unsigned volatile long*) 0x40038050))
    #define ADC0SSDC0 (*((unsigned volatile long*) 0x40038054)
    #define ADC0SSEMUX0 (*((unsigned volatile long*) 0x40038058))
    #define ADC0SSTSH0 (*((unsigned volatile long*) 0x4003805C)
    #define ADC0SSMUX1 (*((unsigned volatile long*) 0x40038060))
    #define ADC0SSCTL1 (*((unsigned volatile long*) 0x40038064))
    #define ADC0SSFIFO1 (*((unsigned volatile long*) 0x40038068))
    #define ADC0SSFSTAT1 (*((unsigned volatile long*) 0x4003806C)
    #define ADC0SSOP1 (*((unsigned volatile long*) 0x40038070))
    #define ADC0SSDC1 (*((unsigned volatile long*) 0x40038074)
    #define ADC0SSEMUX1 (*((unsigned volatile long*) 0x40038078)
    #define ADC0SSTSH1 (*((unsigned volatile long*) 0x4003807C))
    #define ADC0SMUX2 (*((unsigned volatile long*) 0x40038080))
    #define ADC0SSCTL2 (*((unsigned volatile long*) 0x40038084)
    #define ADC0SSFIFO2 (*((unsigned volatile long*) 0x40038088))
    #define ADC0SSFSTAT2 (*((unsigned volatile long*) 0x4003808C))
    #define ADC0SSOP2 (*((unsigned volatile long*) 0x40038090))
    #define ADC0SSDC2 (*((unsigned volatile long*) 0x40038094))
    #define ADC0SSEMUX2 (*((unsigned volatile long*) 0x40038098))
    #define ADC0SSTSH2 (*((unsigned volatile long*) 0x4003809C))
    #define ADC0SMUX3 (*((unsigned volatile long*) 0x400380A0)
    #define ADC0SSCTL3 (*((unsigned volatile long*) 0x400380A4)
    #define ADC0SSFIFO3 (*((unsigned volatile long*) 0x400380A8)
    #define ADC0SSFSTAT3 (*((unsigned volatile long*) 0x400380AC)
    #define ADC0SSOP3 (*((unsigned volatile long*) 0x400380B0))
    #define ADC0SSDC3 (*((unsigned volatile long*) 0x400380B4)
    #define ADC0SSEMUX3 (*((unsigned volatile long*) 0x400380B8))
    #define ADC0SSTSH3 (*((unsigned volatile long*) 0x400380BC)
    #define ADC0DCRIC (*((unsigned volatile long*) 0x40038D00))
    #define ADC0DCCTL0 (*((unsigned volatile long*) 0x40038E00))
    #define ADC0DCCTL1 (*((unsigned volatile long*) 0x40038E04))
    #define ADC0DCCTL2 (*((unsigned volatile long*) 0x40038E08))
    #define ADC0DCCTL3 (*((unsigned volatile long*) 0x40038E0C))
    #define ADC0DCCTL4 (*((unsigned volatile long*) 0x40038E10))
    #define ADC0DCCTL5 (*((unsigned volatile long*) 0x40038E14))
    #define ADC0DCCTL6 (*((unsigned volatile long*) 0x40038E18))
    #define ADC0DCCTL7 (*((unsigned volatile long*) 0x40038E1C))
    #define ADC0DCCMP0 (*((unsigned volatile long*) 0x40038E40))
    #define ADC0DCCMP1 (*((unsigned volatile long*) 0x40038E44))
    #define ADC0DCCMP2 (*((unsigned volatile long*) 0x40038E48))
    #define ADC0DCCMP3 (*((unsigned volatile long*) 0x40038E4C))
    #define ADC0DCCMP4 (*((unsigned volatile long*) 0x40038E50))
    #define ADC0DCCMP5 (*((unsigned volatile long*) 0x40038E54))
    #define ADC0DCCMP6 (*((unsigned volatile long*) 0x40038E58))
    #define ADC0DCCMP7 (*((unsigned volatile long*) 0x40038E5C))
    #define ADC0PP (*((unsigned volatile long*) 0x40038FC0))
    #define ADC0PC (*((unsigned volatile long*) 0x40038FC4))
    #define ADC0CC (*((unsigned volatile long*) 0x40038FC8))

    //
    //
    // ADC 寄存器(ADC1)
    //
    //
    #define ADC1ACTSS (*((unsigned volatile long*) 0x40039000))
    #define ADC1RIS (*((unsigned volatile long*) 0x40039004))
    #define ADC1IM (*((unsigned volatile long*) 0x40039008))
    #define ADC1ISC (*((unsigned volatile long*) 0x4003900C))
    #define ADC1OSTAT (*((unsigned volatile long*) 0x40039010))
    #define ADC1EMUX (*((unsigned volatile long*) 0x40039014))
    #define ADC1USTAT (*((unsigned volatile long*) 0x40039018))
    #define ADC1TSSEL (*((unsigned volatile long*) 0x4003901C))
    #define ADC1SSPRI (*((unsigned volatile long*) 0x40039020))
    #define ADC1SPC (*((unsigned volatile long*) 0x40039024))
    #define ADC1PSSI (*((unsigned volatile long*) 0x40039028))
    #define ADC1SAC (*((unsigned volatile long*) 0x40039030))
    #define ADC1DCISC (*((unsigned volatile long*) 0x40039034))
    #define ADC1CTL (*((unsigned volatile long*) 0x40039038))
    #define ADC1SSMUX0 (*((unsigned volatile long*) 0x40039040))
    #define ADC1SSCTL0 (*((unsigned volatile long*) 0x40039044))
    #define ADC1SSFIFO0 (*((unsigned volatile long*) 0x40039048))
    #define ADC1SSFSTAT0 (*((unsigned volatile long*) 0x4003904C))
    #define ADC1SSOP0 (*((unsigned volatile long*) 0x40039050))
    #define ADC1SSDC0 (*((unsigned volatile long*) 0x40039054))
    #define ADC1SSEMUX0 (*((unsigned volatile long*) 0x40039058))
    #define ADC1SSTSH0 (*((unsigned volatile long*) 0x4003905C)
    #define ADC1SSMUX1 (*((unsigned volatile long*) 0x40039060))
    #define ADC1SSCTL1 (*((unsigned volatile long*) 0x40039064))
    #define ADC1SSFIFO1 (*((unsigned volatile long*) 0x40039068))
    #define ADC1SSFSTAT1 (*((unsigned volatile long*) 0x4003906C)
    #define ADC1SSOP1 (*((unsigned volatile long*) 0x40039070))
    #define ADC1SSDC1 (*((unsigned volatile long*) 0x40039074))
    #define ADC1SSEMUX1 (*((unsigned volatile long*) 0x40039078))
    #define ADC1SSTSH1 (*((unsigned volatile long*) 0x4003907C))
    #define ADC1SSMUX2 (*((unsigned volatile long*) 0x40039080))
    #define ADC1SSCTL2 (*((unsigned volatile long*) 0x40039084))
    #define ADC1SSFIFO2 (*((unsigned volatile long*) 0x40039088))
    #define ADC1SSFSTAT2 (*((unsigned volatile long*) 0x4003908C))
    #define ADC1SSOP2 (*((unsigned volatile long*) 0x40039090))
    #define ADC1SSDC2 (*((unsigned volatile long*) 0x40039094))
    #define ADC1SSEMUX2 (*((unsigned volatile long*) 0x40039098))
    #define ADC1SSTSH2 (*((unsigned volatile long*) 0x4003909C))
    #define ADC1SSMUX3 (*((unsigned volatile long*) 0x400390A0)
    #define ADC1SSCTL3 (*((unsigned volatile long*) 0x400390A4)
    #define ADC1SSFIFO3 (*((unsigned volatile long*) 0x400390A8)
    #define ADC1SSFSTAT3 (*((unsigned volatile long*) 0x400390AC))
    #define ADC1SSOP3 (*((unsigned volatile long*) 0x400390B0))
    #define ADC1SSDC3 (*((unsigned volatile long*) 0x400390B4)
    #define ADC1SSEMUX3 (*((unsigned volatile long*) 0x400390B8))
    #define ADC1SSTSH3 (*((unsigned volatile long*) 0x400390BC)
    #define ADC1DCRIC (*((unsigned volatile long*) 0x40039D00))
    #define ADC1DCCTL0 (*((unsigned volatile long*) 0x40039E00))
    #define ADC1DCCTL1 (*((unsigned volatile long*) 0x40039E04))
    #define ADC1DCCTL2 (*((unsigned volatile long*) 0x40039E08))
    #define ADC1DCCTL3 (*((unsigned volatile long*) 0x40039E0C))
    #define ADC1DCCTL4 (*((unsigned volatile long*) 0x40039E10))
    #define ADC1DCCTL5 (*((unsigned volatile long*) 0x40039E14))
    #define ADC1DCCTL6 (*((unsigned volatile long*) 0x40039E18))
    #define ADC1DCCTL7 (*((unsigned volatile long*) 0x40039E1C))
    #define ADC1DCCMP0 (*((unsigned volatile long*) 0x40039E40))
    #define ADC1DCCMP1 (*((unsigned volatile long*) 0x40039E44))
    #define ADC1DCCMP2 (*((unsigned volatile long*) 0x40039E48))
    #define ADC1DCCMP3 (*((unsigned volatile long*) 0x40039E4C))
    #define ADC1DCCMP4 (*((unsigned volatile long*) 0x40039E50))
    #define ADC1DCCMP5 (*((unsigned volatile long*) 0x40039E54))
    #define ADC1DCCMP6 (*((unsigned volatile long*) 0x40039E58))
    #define ADC1DCCMP7 (*((unsigned volatile long*) 0x40039E5C))
    #define ADC1PP (*((unsigned volatile long*) 0x40039FC0))
    #define ADC1PC (*((unsigned volatile long*) 0x40039FC4))
    #define ADC1CC (*((unsigned volatile long*) 0x40039FC8))


    ////////////////////////
    #define NVIC_EN0_R (*((unsigned volatile long*) 0xE000E100))//144

    空 UARTOutString (char *pt);
    空 UARTOutChar (char 数据);
    空 UARTInChar();
    void UART_config();

    unsigned int i;
    unsigned char 数据[];

    int main (空)

    UART_CONFIG();




    空 UART_CONFIG ()

    RCGCUART |=0x00000001;
    while ((RCGCUART&0x01)=0);
    RCGCGPIO |=0X00001011;
    AFSELA |=0x08;
    Dena |=0x08;
    AMSELE |=0x08;
    UARTCTL &=~0x00000001;
    UARTIBRD |=8;//115200 4=250000 1=1000000
    UARTFBRD |=44;
    UARTLCRH=(1<<5)|(1<<6);//禁用 FIFO 和8位数据传输
    UARTCC &=0x00000000;//系统 CLK
    UARTCTL|=0x00000010;
    UARTCTL|=0x00000001;
    AFSELA |=0x03;
    Dena |=0x03;
    PCTLA |=0x00000011;
    AMSELA &=0x00;
    NVIC_EN0_R =(1<<5);//INT EN
    UARTIM |=(1<<4);
    UARTICR|=(1<<4);//清除 RX INT
    //UARTIFLS &=~0x3F;//清除 FIFO INT 字段 PG-1186 UART 中断 FIFO 深度选择
    //UARTIFLS &=0x00;//TX<=1/8 & RX>=1/8


    void UART0_RXHandler (void)


    I=UARTDR;
    UARTICR|=(1<<4);
    UARTOutString ("{");
    UARTOutChar (I);
    UARTOutString ("}、");



    空 UARTOutString (char *pt){
    while (* pt){
    UARTOutChar (*点);
    PT++;


    空 UARTOutChar (字符数据)

    while ((UARTFR&0x00000020)!= 0);
    UARTDR =数据;


    空 UARTInChar (空)

    while ((UARTFR&0x00000010)!= 0);
    I=UARTDR & 0x000000FF;