?? uart.c
字號:
/******************************************************************************
Filename: uart.c
Target: cc2430
Revised: 16/12-2005
Revision: 1.0
Description:
Reads in data written through the UART. When ENTER is pressed, the data is
written back. ESC ends the session.
Set up hyperterminal for 57600 kBaud transfer.
Use 8 bits, no flow control and no parity bit.
******************************************************************************/
#include <stdio.h>
#include <string.h>
#include "app_ex.h"
#include "lcd128_64.h"
// Prototypes
char uartGetkey(void);
void UartTX_Send_String(char *Data,int len);
#define BUFFER_SIZE 32
typedef struct{
UINT8 pointer;
char text[BUFFER_SIZE];
} BUFFER;
BUFFER buffer;
void initUART(void);
void uart_main(void);
/******************************************************************************
* @fn initUART
*
* @brief
* Initializes components for the UART application example.
*
* Parameters:
*
* @param void
*
* @return void
*
******************************************************************************/
void initUART(void)
{
// Setup for UART0
IO_PER_LOC_UART0_AT_PORT0_PIN2345();
SET_MAIN_CLOCK_SOURCE(CRYSTAL);
UART_SETUP(0, 57600, HIGH_STOP);
UTX0IF = 1;
/*
CLKCON &= ~0x40; //晶振
while(!(SLEEP & 0x40)); //等待晶振穩定
CLKCON &= ~0x47; //TICHSPD128分頻,CLKSPD不分頻
SLEEP |= 0x04; //關閉不用的RC振蕩器
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
P2DIR &= ~0XC0; //P0優先作為串口0
// IO_PER_LOC_UART0_AT_PORT1_PIN2345();
U0CSR |= 0x80; //UART方式
U0GCR |= 10; //baud_e
U0BAUD |= 216; //波特率設為57600
UTX0IF = 0;
// */
// initLcd();
}
/******************************************************************************
* @fn uart_main
*
* @brief
* Main function.
*
* Parameters:
*
* @param void
*
* @return void
*
******************************************************************************/
#ifdef COMPLETE_APPLICATION
void uart_main(void){
#else
void main(void){
#endif
char c = 0;
UINT8 i;
char arr1[17] = "";
char arr2[17] = "";
initUART();
memset(buffer.text, ' ', BUFFER_SIZE);
buffer.pointer = 0;
ClearScreen();
Print6(0,25,"UART <--> LCD",1);
/*
if(LanguageSel == 1)
{
Print6(2,10," Plesae input:",1);
}
else
{
Print(2,8,"請從串口輸入:",1);
}
*/
Print6(2,25,"Plesae Input:",1);
Print6(1,31,"57600 8-N-1",1);
Rectangle(2 , 4 , 124 , 7);
printf((char*)"\n\nType text\n");
printf((char*)"ENTER to readback text to hyperterminal\n");
printf((char*)"BACKSPACE to delete last written character\n");
printf((char*)"ESC to quit\n");
while( !stopApplication() && ( c = uartGetkey()) != ESC ){
switch ( c ){
case ENTER:
for(i = 0; i < BUFFER_SIZE; i++){
printf((char*)"%c", buffer.text[i]);
}
printf((char*)"\n");
memset(buffer.text, ' ', BUFFER_SIZE);
buffer.pointer = 0;
break;
case BACK_SPACE:
if (buffer.pointer > 0){
buffer.pointer--;
buffer.text[buffer.pointer] = ' ';
}
break;
case ESC:
break;
default:
if (buffer.pointer == BUFFER_SIZE){
for(i=0;i<BUFFER_SIZE;i++)
buffer.text[i] = buffer.text[i+1];
buffer.text[i]= c;
}
else
{
buffer.text[buffer.pointer++] = c;
}
break;
}
memcpy(arr1,&buffer.text[0],16);
arr1[16] = '\0';
memcpy(arr2,&buffer.text[16],16);
arr2[16] = '\0';
Print6(5,15,(INT8U*)arr1,1);
Print6(6,15,(INT8U*)arr2,1);
}
}
/****************************************************************
*函數功能 :串口發送字符串函數
*入口參數 : data:數據
* len :數據長度
*返 回 值 :無
*說 明 :
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -