新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > GNU ARM匯編--(七)s3c2440的串口控制

GNU ARM匯編--(七)s3c2440的串口控制

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏

UART MODEM CONTROL REGISTER

這個(gè)和MODEM控制相關(guān),設(shè)置為默認(rèn)值就行.

UART TX/RX STATUS REGISTER

這個(gè)寄存器是只讀的,負(fù)責(zé)反映發(fā)送接收的狀態(tài)

UART ERROR STATUS REGISTER

這個(gè)寄存器也是只讀的,負(fù)責(zé)反映錯(cuò)誤狀態(tài)

UART FIFO STATUS REGISTER

這個(gè)寄存器也是只讀的,負(fù)責(zé)反映FIFO的狀態(tài)

UART MODEM STATUS REGISTER

這個(gè)寄存器是MODEM狀態(tài)的,不用管它

UART TRANSMIT BUFFER REGISTER (HOLDING REGISTER & FIFO REGISTER)

發(fā)送緩沖寄存器:FIFO模式下叫FIFO寄存器,非FIFO模式下叫Holding寄存器

需要注意的就是大小端

UART RECEIVE BUFFER REGISTER (HOLDING REGISTER & FIFO REGISTER)

接收緩沖寄存器:FIFO模式下叫FIFO寄存器,非FIFO模式下叫Holding寄存器

UART BAUD RATE DIVISOR REGISTER

波特率除數(shù)寄存器

UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
( UART clock: PCLK, FCLK/n or UEXTCLK )

看完datasheet后,我們看一下TQ2440的原理圖:

由原理圖可以看出,TQ2440使用的UART0,我們用MAX232芯片做電平轉(zhuǎn)換.

有了datasheet和原理圖,下面就開始寫匯編代碼了:

時(shí)鐘初始化和uart初始化用匯編寫的:

[cpp]view plaincopy
  1. @.externuart_test
  2. .equGPBCON,0x56000010
  3. .equGPBDAT,0x56000014
  4. .equGPB5_out,(1<<(5*2))
  5. .equGPB6_out,(1<<(6*2))
  6. .equGPB7_out,(1<<(7*2))
  7. .equGPB8_out,(1<<(8*2))
  8. .equGPHCON,0x56000070
  9. .equGPHDAT,0x56000074
  10. .equGPBVALUE,(GPB5_out|GPB6_out|GPB7_out|GPB8_out)
  11. .equLOCKTIME,0x4c000000
  12. .equMPLLCON,0x4c000004
  13. .equUPLLCON,0x4c000008
  14. .equM_MDIV,92
  15. .equM_PDIV,1
  16. .equM_SDIV,1
  17. .equU_MDIV,56
  18. .equU_PDIV,2
  19. .equU_SDIV,2
  20. .equCLKDIVN,0x4c000014
  21. .equDIVN_UPLL,0
  22. .equHDIVN,1
  23. .equPDIVN,1@FCLK:HCLK:PCLK=1:2:4
  24. .equULCON0,0x50000000
  25. .equIR_MODE,0x0@[6]正常模式
  26. .equParity_Mode,0x0@[5:3]無(wú)校驗(yàn)位
  27. .equNum_of_stop_bit,0x0@[2]一個(gè)停止位
  28. .equWord_length,0b11@[1:0]8個(gè)數(shù)據(jù)位
  29. .equUCON0,0x50000004
  30. .equFCLK_Div,0@[15:12]時(shí)鐘源選擇用PCLK,所以這里用默認(rèn)值
  31. .equClk_select,0b00@[11:10]時(shí)鐘源選擇使用PCLK
  32. .equTx_Int_Type,1@[9]中斷請(qǐng)求類型為L(zhǎng)evel
  33. .equRx_Int_Type,0@1@[8]中斷請(qǐng)求類型為L(zhǎng)evel
  34. .equRx_Timeout,0@[7]
  35. .equRx_Error_Stat_Int,1@[6]
  36. .equLoopback_Mode,0@[5]正常模式
  37. .equBreak_Sig,0@[4]不發(fā)送終止信號(hào)
  38. .equTx_Mode,0b01@[3:2]中斷請(qǐng)求或輪循模式
  39. .equRx_Mode,0b01@[1:0]中斷請(qǐng)求或輪循模式
  40. .equUFCON0,0x50000008
  41. .equTx_FIFO_Trig_Level,0b00@[7:6]
  42. .equRx_FIFO_Trig_Level,0b00@[5:4]
  43. .equTx_FIFO_Reset,0b0@[2]
  44. .equRx_FIFO_Reset,0b0@[1]
  45. .equFIFO_Enable,0b0@[0]非FIFO模式
  46. .equUMCON0,0x5000000C@這個(gè)寄存器可以不管的
  47. .equUTRSTAT0,0x50000010
  48. .equUERSTAT0,0x50000014
  49. .equUFSTAT0,0x50000018
  50. .equUMSTAT0,0x5000001C
  51. .equUTXH0,0x50000020@(L小端)
  52. .equURXH0,0x50000024@(L小端)
  53. .equUBRDIV0,0x50000028
  54. .equUBRDIV,0x35@PCLK=400M/4=100MUBRDIV=(int)(100M/115200/16)-1=53=0x35


關(guān)鍵詞: ARM匯編s3c2440串口控

評(píng)論


技術(shù)專區(qū)

關(guān)閉