while testing this code only with tx(RX pin is open) it is working fine at the other hand tested it with only rx(TX is open) everthing is working as i expected, but when it comes to combine both rx and tx at the same time my mcu gets stuck and it keeps hanging untill i remove one of the communication pin and restart the mcu. for your reference i am attaching my initialises for the uart and timer below.kindly go throgh it and help me to solve this issue. thank you .
int8_t USART_0_init()
{
USART2.BAUD = (uint16_t)USART2_BAUD_RATE(115200); /* set baud rate register */
USART2.CTRLA = 0 << USART_ABEIE_bp /* Auto-baud Error Interrupt Enable: disabled */
| 0 << USART_DREIE_bp /* Data Register Empty Interrupt Enable:
| 0 << USART_LBME_bp /* Loop-back Mode Enable: disabled */
| USART_RS485_DISABLE_gc /* RS485 Mode disabled */
| 1 << USART_RXCIE_bp /* Receive Complete Interrupt Enable:
| 0 << USART_RXSIE_bp /* Receiver Start Frame Interrupt Enable:
| 0 << USART_TXCIE_bp; /* Transmit Complete Interrupt Enable:
USART2.CTRLB = 0 << USART_MPCM_bp /* Multi-processor Communication Mode: disabled */
| 0 << USART_ODME_bp /* Open Drain Mode Enable: disabled */
| 1 << USART_RXEN_bp /* Receiver Enable: enabled */
| USART_RXMODE_NORMAL_gc /* Normal mode */
| 0 << USART_SFDEN_bp /* Start Frame Detection Enable: disabled */
| 1 << USART_TXEN_bp; /* Transmitter Enable: enabled */
USART2.CTRLC = USART_CMODE_ASYNCHRONOUS_gc /* Asynchronous Mode */
| USART_CHSIZE_8BIT_gc /* Character size: 8 bit */
| USART_PMODE_DISABLED_gc /* No Parity */
| USART_SBMODE_1BIT_gc; /* 2 stop bits */
// USART2.DBGCTRL = 0 << USART_DBGRUN_bp; /* Debug Run: disabled */
// USART2.EVCTRL = 0 << USART_IREI_bp; /* IrDA Event Input Enable: disabled */
// USART2.RXPLCTRL = 0x0 << USART_RXPL_gp; /* Receiver Pulse Length: 0x0 */
// USART2.TXPLCTRL = 0x0 << USART_TXPL_gp; /* Transmit pulse length: 0x0 */
#if defined(__GNUC__)
stdout = &USART_0_stream;
#endif
return 0;
}`
int8_t TIMER_0_init()
{
TCB0.CCMP = 15999; /* Compare or Capture: 0x0 */
// TCB0.CNT = 0x0; /* Count: 0x0 */
TCB0.CTRLB = 1 << TCB_ASYNC_bp /* Asynchronous Enable: enabled */
| 0 << TCB_CCMPEN_bp /* Pin Output Enable: disabled */
| 0 << TCB_CCMPINIT_bp /* Pin Initial State: disabled */
| TCB_CNTMODE_INT_gc; /* Periodic Interrupt */
// TCB0.DBGCTRL = 0 << TCB_DBGRUN_bp; /* Debug Run: disabled */
TCB0.EVCTRL = 0 << TCB_CAPTEI_bp /* Event Input Enable: disabled */
| 0 << TCB_EDGE_bp /* Event Edge: disabled */
| 1 << TCB_FILTER_bp; /* Input Capture Noise Cancellation Filter: disabled */
TCB0.INTCTRL = 1 << TCB_CAPT_bp /* Capture or Timeout: enabled */
| 0 << TCB_OVF_bp; /* OverFlow Interrupt: disabled */
TCB0.CTRLA = TCB_CLKSEL_DIV1_gc /* CLK_PER */
| 1 << TCB_ENABLE_bp /* Enable: enabled */
| 0 << TCB_RUNSTDBY_bp /* Run Standby: disabled */
| 0 << TCB_SYNCUPD_bp /* Synchronize Update: disabled */
| 0 << TCB_CASCADE_bp; /* Cascade Two Timer/Counters: disabled */
return 0;
}
int main(void)
{
/* Initializes MCU, drivers and middleware */
atmel_start_init();
sei();
PORTA.DIR|=PIN5_bm;
PORTA.OUT &=~ PIN5_bm;
greenLed_set_level(true);
redLed_set_level(true);
while (1) {
if (dat == 2)
{
greenLed_set_level(false);
}
else if (dat == 4)
{
greenLed_set_level(true);
}
if (b>=1000)
{
b=0;
if (buffer[0]==0x5A)
{
if (buffer[4]==0X90)
{
printf("%x",buffer[8]);
}
else if (buffer[4]==0X10)
{
dat = buffer[8];
printf("%x",buffer[8]);
}
else if (buffer[4]==0X20)
{
printf("%x",buffer[8]);
}
else if (buffer[4]==0X30)
{
printf("%x",buffer[8]);
}
else if (buffer[4]==0X40)
{
printf("%x",buffer[8]);
}
else if (buffer[4]==0X50)
{
d=buffer[8];
printf("%d",d);
}
memset(buffer,0,sizeof buffer);
}
else{
for (int n=0; n<=8; n++)
{
USART2.CTRLB &=~ USART_RXEN_bm;
USART2.CTRLA &=~ USART_RXCIF_bm;
USART_0_write(Temperature[n]);
USART2.CTRLB |= USART_RXEN_bm;
USART2.CTRLA |= USART_RXCIF_bm;
PORTC.OUTTGL|=PIN2_bm;
}
}
}
}
}
ISR(USART2_RXC_vect){
for (int i=0; i<=8; i++)
{
buffer[i] = USART_0_read();
}
}
ISR(TCB0_INT_vect){
//greenLed_set_level(false);
a++;
b++;
if (a>=1000)
{
a=0;
l++;
if (l>255)
{
l=0;
}
Temperature[7]=l;
}
TCB0.INTFLAGS = TCB_CAPT_bm;
}
MCU gets stuck every time i connect it with my DWIN HMI.