comunicación serie mega usando MAX3232

0

Hola, estoy tratando de hablar para enviar un personaje a la PC usando el xmega128a1 y el US32 MAX3232 al chip convertidor de serie. Aquí está mi configuración y la función "enviar carácter" a continuación:

void USARTSetup(){
PORTC.DIRCLR = PIN2_bm;     //Set RxD pin as input
PORTC.DIRSET = PIN3_bm;     //Set TxD pin as output
PORTC.OUTSET = PIN3_bm;     //Set TxD pin high
//The following setup is for a clock of 32MHz
//and a desired baud rate of 19200
USARTD0_BAUDCTRLB = 0xB0;   //set B(scale) to -5
USARTD0_BAUDCTRLA = 0xE5;   //set BSEL to 3301
USARTD0_BAUDCTRLB |= 0x0C;  //set BSEL to 3301
USARTD0_CTRLA = 0x00;       //disable USART interrupts
USARTD0_CTRLB = 0x18;       //enable receive and transmit
USARTD0_CTRLC = 0x03;       //8 data bits, no parity and 1 stop bit
}

void USARTSendByte(UINT8 data){
while(!(USARTD0_STATUS & USART_DREIF_bm));  //wait until DATA buffer is empty
USARTD0_DATA = data;                        //load data
while(!(USARTD0_STATUS & USART_TXCIF_bm));  //wait until transfer complete
USARTD0_STATUS |= USART_TXCIF_bm;           //write 1 to clear bit
}

La depuración parece bloquearse tan pronto como llega a esta parte del código:

while(!(USARTD0_STATUS & USART_TXCIF_bm));

Y nada se envía al hiperterminal.

mi cableado es como se muestra a continuación:

Como se puede ver, he puesto en bucle los pines de intercambio de manos y los pines CTS / RTS.

¿Puede alguien ayudarme a orientarme en la dirección correcta? No tengo idea de por qué no puedo enviar un byte al hiperterminal.

    
pregunta Sam Bucca

1 respuesta

1

Para cualquiera que se estuviera preguntando cuál era el problema, estaba usando el USART incorrecto para el PUERTO C

Vea, los pines están etiquetados como 'RXD0' y 'TXD0' en la hoja de datos, (no relacionado con el número USART - No sé a qué se refiere D0 / DO en este caso), sin embargo, para el puerto C pin2 y amp; 3 , el USART correcto es USARTC0.

Cambiar cada instancia de USARTD0 a USARTC0 en el código anterior hará que esto funcione.

Cualquier persona que desee utilizar rs232 para comunicarse con un atxmegaA1 puede usar la configuración anterior.

    
respondido por el Sam Bucca

Lea otras preguntas en las etiquetas