討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 網路投保旅行平安險 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
ARM7 LPC2364 UART問題
更改我的閱讀文章字型大小
作者 : toyboy(toyboy) 貼文超過200則人氣指數超過30000點
[ 貼文 438 | 人氣 37407 | 評價 1120 | 評價/貼文 2.56 | 送出評價 71 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/12/14 下午 04:29:39
各位大大:
     小弟使用LPC2364這塊板子進行uart的練習,使用光碟的範例程式,將hex程式
     燒錄至板子上,然後開啟超級終端機,選擇COM1,再使用鍵盤keyin,但是並非如預期,並沒有任
     何東西顯示在超級終端機上
     原先送資料的Method如下:
     void UARTSend(BYTE *BufferPtr, DWORD Length )
{
    while ( Length != 0 )
    {
/* THRE status, contain valid data */
while ( !(UART0TxEmpty & 0x01) );
U0THR = *BufferPtr;
UART0TxEmpty = 0; /* not empty in the THR until it shifts out */
BufferPtr++;
Length--;
    }
    return;
}
     但是被我改成如下:
void UARTSend(DWORD Length )
{
    while ( Length != 0 )
    {
/* THRE status, contain valid data */
//while ( !(UART0TxEmpty & 0x01) );
//U0THR = *BufferPtr;
     U0THR='G';
UART0TxEmpty = 0; /* not empty in the THR until it shifts out */
BufferPtr++;
Length--;
    }
    return;
}
修改之後終端機有資料會顯示了,但預期顯示G,結果卻顯示R
網路上有人說這種情形可能為鮑率設定問題,鮑率設定的Method如下:
DWORD UARTInit( DWORD baudrate )
{
    DWORD Fdiv;
    PINSEL0 = 0x00000050; /* RxD0 and TxD0 */

    U0LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */
    Fdiv = ( Fpclk / 16 ) / baudrate ; /*baud rate */
    U0DLM = Fdiv / 256;
    U0DLL = Fdiv % 256;
U0LCR = 0x03; /* DLAB = 0 */
    U0FCR = 0x07; /* Enable and reset TX and RX FIFO. */

    if ( install_irq( UART0_INT, (void *)UART0Handler, HIGHEST_PRIORITY ) == FALSE )
    {
return (FALSE);
    }
   
    U0IER = IER_RBR | IER_THRE | IER_RLS; /* Enable UART0 interrupt */
    return (TRUE);
}
小弟使用工具為keil c,因小弟從沒接觸過ARM,對硬體也完全不懂
若以上資訊還欠缺什麼,還煩請告知

     謝謝大大的教導,謝謝^-^|||
作者 : toyboy(toyboy) 貼文超過200則人氣指數超過30000點
[ 貼文 438 | 人氣 37407 | 評價 1120 | 評價/貼文 2.56 | 送出評價 71 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/12/23 下午 05:51:13
已解決打的字與超級終端機顯示的字不同的問題了
程式中有一宣告的變數
extern volatile BYTE UART0Buffer[BUFSIZE];
在uart0中斷函式中:
會把接收到的值記錄到UART0Buffer[UART0Count]中
UART0Buffer[UART0Count]=U0RBR;
在傳送的函式中,會把UART0Buffer中的值,指派給U0THR
void UARTSend(BYTE *BufferPtr,DWORD Length)
{
  while(Length!=0)
  {
    while(!(UART0TxEmpty&0x01));
    U0THR=*BufferPtr;
    UART0TxEmpty=0;
    BufferPtr++;
    Length--;
  }
}
呼叫時,程式碼如下:
U0IER=IER_THRE|IER_RLS;
UARTSend((BYTE *)UART0Buffer,UART0Count);
UART0Count=0;
U0IER=IER_THRE|IER_RLS|IER_RBR;

該如何更改UARTSend函式,以達到傳送我自行定義的字串?
試過將字串填值至UART0Buffer中,但失敗了

UART0Buffer[0]='a';
UART0Buffer[1]='s';

謝謝大大的教導,謝謝!!^_^|||
 板主 : yuan
 > 嵌入式系統(Embedded System) - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 嵌入式系統(Embedded System) - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
嵌入式系統(Embedded System)
1 kting 770 
2 Lingb 400 
3 sazabi 400 
4 Huah 390 
5 hawkeye 380 
6 H 360 
7 yuan 350 
8 Kenny 310 
9 ozzy 290 
10 富伯 280 
嵌入式系統(Embedded System)
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125