>>Drew的主页---->硬件驱动---->MPC860串口模式

 

主页

VxWorks

ARM

PowerPC

硬件驱动

网络协议

程序示例

下载

个人兴趣

 

MPC860 UART模式

 

Drew 参考MPC860用户手册对SCC实现串口模式步骤进行分析解释. 具体的寄存器定义参看MPC860用户手册。

具体可参考 下载页 上的源码。 

下面SCC UART模式初始化为9600波特率,8数据位,无奇偶校验,停止位1,25M系统频率.以BRG1和SCC2为例.控制器设置RTS2,CTS2 和 CD2;

  1. 设置端口A,使能 TXD2 和 TXD2.置位 PAPAR[12,13],清空 PADIR[12,13] 和 PAODR[12,13].

  2. 设置端口C,使能 RTS2,CTS2和CD2.置位 PCPAR[14] 和 PCSO[8,9], 清空 PCPAR[8,9]和 PCDIR[8,9,14].

  3. 设置 BRG1.写 0x010144 到 BRGC1.不使用位 DIV16, 分配器divider为162 (十进制).这样使得 BRG1 的时钟为 16* 位变化。

  4. 用串行接口连接 BRG1 到 SCC2.清空 SICR[R2CS,T2CS]. SICR = 0x11;

  5. 初始化 SDMA 配置寄存器 (SDCR = 0x0001为正常方式)。

  6. 连接 SCC2 到 NMSI,清空 SICR[SC2]

  7. 在 SCC2 参数 RAM 中写 RBASE 和 TBASE 指向双口 RAM 中的 RxBD 和 TxBD 表。假定双口 RAM 起始位置的RxBD 后紧接的是 一个 TxBD, 写 RBASE 为 0x0000, TBASE 为 0x0008。

  8. 在 CPCR 中写 0x0041,执行 SCC2 的 INIT RX AND TX PARAMS 命令。这个命令用新的 RBASE 和 TBASE 值来更新串行通道的 RBPTR 和 TBPTR。

  9. 写 0x10 到 RFCR 和 TFCR。

  10. 在 MRBLR 中设定每个 Rx buffer 的最大字节数值。如果是 16个字节,则 MRBLR = 0x0010。 

  11. 在 参数 RAM 中 MAX_IDL 写入 0x0000 **********来失效最大的 空闲*******。the maximum idle

  12. 设置 BRKCR 为 0x0001,这样 STOP TRANSMIT 命令************send only one break character.

  13. 清空参数 RAM 中的 PAREC, FRMEC, NOSEC, 和 BRKEC

  14.  UADDR1 和 UADDR2. 不使用它们。

  15. 清空 TOSEQ, 不使用。

  16. 写 0x8000 到 CHARACTER1, 不使用。

  17. 写 0xC0FF 到 RCCM. 不使用。

  18. 初始化 RxBD. 假定 Rx buffer 在主存储区 0x0000_1000 位置。写 0xB000 到 RxBD[Status 和 Control], 写 0x0000 到 RxBD[Data Length] (可选),写 0x00001000 到 RxBD[Buffer Pointer].

  19. 初始化 TxBD. 假定 Tx buffer 在主存储区 0x0000_2000 位置并包含16个8位字符。写 0xB000 到 TxBD[Status 和 Control], 写 0x0010 到 TxBD[Data Length],写 0x00002000 到 RxBD[Buffer Pointer].

  20. 在 SCCE2 中写入 0xFFFF 来清空任何以前的事件previous events。

  21. 在 SCCM2 中写入 0x0003 来使能enable TX 和 RX 中断。

  22. 在 CPM 中断屏蔽寄存器中(CIMR)中写入 0x2000_000,放开允许 SCC2 产生的一个系统中断。CICR 也应该初始化。

  23. 写 0x0000_0020 到 GSM_H2 来设置一个小的 RX FIFO 宽。

  24. 写 0x0002_8004 到 GSM_L2 来设置发送和接受的 16* 采样****************sampling,写 0x0002_8004到  CTS 和 CD 来自动控制发送和接受(DIAG 位),SCC 为 UART 模式。注意 发送器(ENT)和接收器 (ENR)还没有被使能。24. Write 0x0002_8004 to GSMR_L2 to con辡ure 16? for transmit and
    receive, /CTS and /CD to automatically control transmission and reception (DIAG
    bits), and the SCC for UART mode. Notice that the transmitter (ENT) and receiver
    (ENR) have not been enabled yet.

  25. 设 PSMR2 位 0xB000 来设置用/CTS,8位字符,无奇偶校验,一个停止位和异步 SCC UART 操作自动流程控制。

  26. 写 0x0002_8034 到 GSMR_L2 来使能发送器和接收器。这样保证 ENT 和 ENR 肯定能被使能。

注意16字节发送完毕后,transmit buffer 关闭。此外,receive buffer 接收到16字节后也关闭。

Note that after 16 bytes are sent, the transmit buffer is closed. Additionally, the receive
buffer is closed after 16 bytes are received. Data received after 16 bytes causes a busy
(out-of-buffers) condition because only one RxBD is prepared.