Dwin Hmi Interfacing with Avr32da28

28 Views Asked by At

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.

0

There are 0 best solutions below