TI 的三个UART都支持ISO7816,这是很多MCU都没有的,相关的说明可以在数据手册上找到
14.3.5 对 ISO 7816 的支持
UART 为与 ISO 7816 智能卡之间的通信提供了一些基本支持。对 UARTCTL 寄存器的第 3 位
(SMART) 进行置位时,UnTx信号用作位时钟信号,而UnRx信号用作连接到智能卡的半双工通信线
路。可将 GPIO 信号用于向智能卡发出复位信号。其余智能卡信号应由系统设计提供。此模式下的
最大时钟速率是系统时钟/16。
使用 ISO 7816 模式后,UARTLCRH寄存器必须设置为发送 8 位字(WLEN位域 6:5 配置为 0x3),
带偶校验(对 PEN 和 EPS 进行置位)。在这种模式下,UART 自动使用 2 个停止位,而忽略
UARTLCRH 寄存器中的 STP2 位。
如果在发送期间检测到奇偶校验错误,UnRx 将在第二个停止位期间拉至低电平。此时,UART 将
终止发送、清空发送 FIFO 并丢弃其中的所有数据,同时产生一个奇偶校验错误中断,以便让软件
检测到该问题,并重新发送受影响的数据。请注意,在这种情况下,UART 并不支持自动重新发送。
14.3.6 对调制解调器握手信号的支持
本节介绍在将 UART 作为数据终端设备 (DTE) 或数据通信设备 (DCE) 连接时,如何为 UART1 配置
并使用调制解调器的流控和状态信号。一般来说,调制解调器为 DCE,与调制解调器相连的计算设
备为 DTE。
14.3.6.1 信号
根据 UART 是用作 DCE 还是 DTE,UART1 所提供的状态信号有所不同。用作 DTE 时,调制解调
器的流控和状态信号定义如下:
■ U1CTS 为允许发送信号
■ U1DSR 为数据集就绪信号
■ U1DCD 为数据载波检测信号
■ U1RI 为振铃指示信号
■ U1RTS 为请求发送信号
■ U1DTR 为数据终端就绪信号
用作 DCE 时,调制解调器的流控和状态信号定义如下:
■ U1CTS 为请求发送信号
■ U1DSR 为数据终端就绪信号
■ U1RTS 为允许发送信号
■ U1DTR 为数据集就绪信号
请注意,用作 DCE 时没有数据载波检测信号和振铃指示信号。如果需要用到这些信号,可使用通用
I/O 信号并提供软件支持来模拟这些功能。
■ 注意:在 ISO 7816 智能卡模式中(当 UARTCTL 寄存器中的 SMART 位置位时)UARTCTL 寄存器
中的 HSE 位状态对时钟的产生无影响
void Write(void)
{
data_len=0;
data_buf[data_len++]=0x00;
data_buf[data_len++]=0x84;
data_buf[data_len++] =0x00;
data_buf[data_len++] =0x00;
data_buf[data_len++] =0x08;
while(data_len)
{
UARTCharPut(PORT,data_buf[i++]);
}
}
void Reset(void)
{
GPIOPinWrite(ESAM_GPIO, ESAM _PIN,0);
GPIOPinWrite(ESAM_GPIO, ESAM _PIN,16);
}
void Init(void)
{
GPIOPinTypeUART(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1);
GPIOPinConfigure(GPIO_PB0_U1RX)
GPIOPinConfigure(GPIO_PB1_U1TX);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_3);
UARTDisable(UART1_BASE);
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 115200,(UART_LCRH_WLEN_8|UART_LCRH_EPS|UART_LCRH_PEN) );
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
UARTSmartCardEnable(UART1_BASE);
UARTEnable(UART1_BASE);
}
三个支持 IrDA、9 位以及 ISO 7816 的 UART(其中一个带调制解调器流量控制和状态的UART), 支持与 ISO 7816 智能卡的通信 [ 本帖最后由 hansonhe 于 2012-3-20 09:45 编辑 ] |