IO PSIOCtrl 701 EH PSIOData 701 AH PSIOAddrLow

  • Slides: 26
Download presentation

串列埠控制的暫存器 操作 I/O位址 P_SIO_Ctrl 讀/寫 $701 EH P_SIO_Data 讀/寫 $701 AH P_SIO_Addr_Low 讀/寫 $701

串列埠控制的暫存器 操作 I/O位址 P_SIO_Ctrl 讀/寫 $701 EH P_SIO_Data 讀/寫 $701 AH P_SIO_Addr_Low 讀/寫 $701 BH P_SIO_Addr_Mid 讀/寫 $701 CH P_SIO_Addr_High 讀/寫 $701 DH P_SIO_Start 讀/寫 $701 FH P_SIO_Stop 寫 $7020 H P_UART_Command 1 寫 $7021 H P_UART_Command 2 讀/寫 $7022 H P_UART_Data 讀/寫 $7023 H P_UART_Baud. Scalar. Low 讀/寫 $7024 H 暫存器名稱 6

UART相關暫存器 o o P_UART_Command 1 (寫) ($7021 H) 規劃中斷方式、同位元 P_UART_Command 2 (讀/寫) ($7022 H)

UART相關暫存器 o o P_UART_Command 1 (寫) ($7021 H) 規劃中斷方式、同位元 P_UART_Command 2 (讀/寫) ($7022 H) 狀態 P_UART_Data(讀/寫)($7023 H) P_UART_Baud. Scalar. Low(讀/寫 )($7024 H) 速率 P_UART_Baud. Scalar. High (讀/寫 )($7025) 7

P_SIO_Data 暫存器 b 7 b 6 b 5 b 4 b 3 b 2

P_SIO_Data 暫存器 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 9

P_SIO_ Addr 暫存器群 P_SIO_ Addr_Low b 7 b 6 b 5 b 4 b

P_SIO_ Addr 暫存器群 P_SIO_ Addr_Low b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 P_SIO_Addr_ Mid b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 P_SIO_Addr_High b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 A 23 A 22 A 21 A 20 A 19 A 18 A 17 A 16 10

P_SIO_Start /P_SIO_Stop P_SIO_Start b 7 b 6 Bu s y b 5 b 4

P_SIO_Start /P_SIO_Stop P_SIO_Start b 7 b 6 Bu s y b 5 b 4 b 3 b 2 b 1 b 0 - - - P_SIO_Stop 向 P_SIO_Stop暫存器寫入任一數值,可以停止資料傳輸 11

P_UART_Data 暫存器 b 7 b 6 b 5 b 4 b 3 b 2

P_UART_Data 暫存器 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 15

P_UART_Baud. Scalar 暫存器群 o o o UART 串列傳輸速率的計算公式如下: Fosc=49. 152 / 40. 960 /

P_UART_Baud. Scalar 暫存器群 o o o UART 串列傳輸速率的計算公式如下: Fosc=49. 152 / 40. 960 / 32. 768 MHz時, 傳輸速率Baud= ( Fosc / 4 ) / Scale Fosc=24. 576 / 20. 480 MHz時, 傳輸速率Baud= ( Fosc / 2 ) / Scale 16

24. 576 / 49. 152 MHz 常用速率值 串列傳輸速率 (bps) 高位元組 ($7025 H) 低位元組 ($7024

24. 576 / 49. 152 MHz 常用速率值 串列傳輸速率 (bps) 高位元組 ($7025 H) 低位元組 ($7024 H) Scale (十進位) 實際傳輸速率 (bps) 1500 (最小值) 1 FH FFH 8192 1500 2400 14 H 00 H 5120 2400 4800 0 AH 00 H 2560 4800 9600 05 H 00 H 1280 9600 19200 02 H 80 H 640 19200 38400 01 H 40 H 320 38400 48000 01 H 00 H 256 48000 51200 00 H F 0 H 240 51200 57600 00 H D 5 H 213 57690 102400 00 H 78 H 120 102400 115200 (最大 值) 00 H 6 BH 107 114841 17

20. 48 / 40. 96 MHz常用速率值 串列傳輸速率 (bps) 高位元組 ($7025 H) 低位元組 ($7024 H)

20. 48 / 40. 96 MHz常用速率值 串列傳輸速率 (bps) 高位元組 ($7025 H) 低位元組 ($7024 H) Scale (十進位) 實際串列傳輸速 率(bps) 1500 (最小值) 1 AH ABH 6827 1500 2400 10 H ABH 4267 2400 4800 08 H 55 H 2133 4801 9600 04 H 2 BH 1067 9597 19200 02 H 15 H 533 19212 38400 01 H 0 BH 267 38352 40000 01 H 00 H 256 40000 48000 00 H D 5 H 213 48075 51200 00 H C 8 H 200 51200 57600 00 H B 2 H 178 57528 102400 00 H 64 H 100 102400 115200 (最大 值) 00 H 59 H 89 115056 18

32. 768 MHz 常用速率值 串列傳輸速率 (bps) 高位元組 ($7025 H) 低位元組 ($7024 H) Scale (十進位)

32. 768 MHz 常用速率值 串列傳輸速率 (bps) 高位元組 ($7025 H) 低位元組 ($7024 H) Scale (十進位) 實際串列傳輸速 率(bps) 1500 (最小值) 15 H 5461 1500 2400 0 DH 55 H 3413 2400 4800 06 H ABH 1707 4799 9600 03 H 55 H 853 9604 19200 01 H ABH 427 19185 38400 00 H D 5 H 213 38460 48000 00 H ABH 171 47906 51200 00 H A 0 H 160 51200 57600 00 H 8 EH 142 57690 102400 00 H 50 H 80 102400 115200 (最大 值) 00 H 47 H 71 115380 19

SPCE 061 A 與 PC 連接圖 20

SPCE 061 A 與 PC 連接圖 20

SPR 4096電路圖 21

SPR 4096電路圖 21

UART相關副程式 1 void UART_Init() { char ch; // 注意: 特殊接腳時仍須設定GPIO暫存器, 否則可能因被強迫pull-high/low而不動作 *P_IOB_Dir=0 x 0400;

UART相關副程式 1 void UART_Init() { char ch; // 注意: 特殊接腳時仍須設定GPIO暫存器, 否則可能因被強迫pull-high/low而不動作 *P_IOB_Dir=0 x 0400; *P_IOB_Attrib=0 x 0480; *P_UART_Command 1=0 x 20; *P_UART_Command 1=0 x 00; // IOB 10=output(TX), IOB 7=input(RX) // IOB 10=not invert, IOB 7=float // UART reset, 無同位元 //*P_UART_Baud. Scalar. High=0 x 00; // Baud=115200 bps //*P_UART_Baud. Scalar. Low=0 x 6 B; *P_UART_Baud. Scalar. High=0 x 05; // Baud=9600 bps *P_UART_Baud. Scalar. Low=0 x 00; *P_UART_Command 2=0 x 00 C 0; ch = *P_UART_Data; // 致能RX/TX // 清除緩衝區 } 22

UART相關副程式 2 char UART_Get. Byte() { while( ! (*P_UART_Command 2 & 0 x 0080))

UART相關副程式 2 char UART_Get. Byte() { while( ! (*P_UART_Command 2 & 0 x 0080)) { //等待接收完畢 *P_Watchdog_Clear=C_WDTCL R; } return *P_UART_Data; } 23

UART相關副程式 3 void UART_Send. Byte(char ch) { while( !( *P_UART_Command 2 & 0 x

UART相關副程式 3 void UART_Send. Byte(char ch) { while( !( *P_UART_Command 2 & 0 x 0040)) { //等待前一次發射完畢 *P_Watchdog_Clear=C_WDTCL R; } 24

uart. h o o o o void UART_Init(); char UART_Get. Byte(); void UART_Get. String(char

uart. h o o o o void UART_Init(); char UART_Get. Byte(); void UART_Get. String(char *); void UART_Put_Dec(unsigned int ); void UART_Send. Byte(char); void UART_Send. String(char *); void UART_Send. String_no_linefeed(ch ar *); 25