Forum Replies Created
Viewing 1 post (of 1 total)
-
AuthorPosts
-
varma
ParticipantdsPIC30F5011 / MPLAB8.8HI,I have initilized a buffer array , char buf[24];wrote an ISR.configured bits as<code>U1STAbits.UTXISEL = 1; // Interrupt when a character is transferred to the Transmit Shift registerU1STAbits.UTXBRK = 0; // Operate U1Tx Normally on Transmit Break BitU1STAbits.UTXEN = 1; // Enable U1 TranmissionU1STAbits.URXISEL = 0; // Interrupt flag bit is set when Receive Buffer is 3/4 full (i.e., has 1 data characters)// b00 or b01 for 1 letter buffer size, b10 for 3 letter buffer , 11 for 4 letter buffer size</code>I could absolutely send and receive 1,3,4 chars respectively. And I can now understand that bufarray is being over written in last digits as I shown in the picture.Now my problem is I want to transmit more than 4 letters at once and then receive.So for an example I have randomly chosen 24 chars .If I write value for U1STAbits.URXISEL , the interrupt automatically breaks up when the buffer is full with 1 or 3 or 4 chars, as mentioned in the data sheet of the processor.how do I write for a 24 char similarly ? Do I need to write a seperate ISR for this ? then how ? but I cannot use _U1TXInterrupt vector then.Suggest me a way to do it ?code for UART.c<code>#include<P30F5011.h>#include”UART1.h”char buf[24];int j;void init_UART1() // Initialization function.{TRISFbits.TRISF3 = 0; // Configure RF3 as Output for UART1 Tx .TRISFbits.TRISF2 = 1; // Configure RF2 as Input for UART1 Rx./********************* CONFIGURE UART1 Baud Rate Generator Register ********************** ** FCY : 8 MHz, ** Desired Baud Rate : 9600 / 19200 ** Desired U1BRG = 25 or 0x19h / 0x33 ** *****************************************************************************************/U1BRG = 51; //XT /w PLL 4x/************************* CONFIGURE UART1MODE Register********************************/U1MODEbits.USIDL = 0; // Continue operation in Idle modeU1MODEbits.ALTIO = 0; // UART communicates usingalternate UxTX and UxRX I/O pinsU1MODEbits.WAKE = 1; // Enable Wake upU1MODEbits.LPBACK = 0; // Disable Loop BackU1MODEbits.ABAUD = 0; // Disable Auto BaudU1MODEbits.PDSEL = 0; // 8 Bit Data, No ParityU1MODEbits.STSEL = 0; // 1 Stop BitIPC2bits.U1TXIP = 7; // Tx priority level.IPC2bits.U1RXIP = 7; // Rx priority level.U1MODEbits.UARTEN = 1; // Enable UARTIEC0bits.U1TXIE = 1; // Enabling TX interrupt.IEC0bits.U1RXIE = 1; // Enabling Rx interrupt./********************* CONFIGURE UART1 STATUS & CONTROL Register ***********************/U1STAbits.UTXISEL = 1; // Interrupt when a character is transferred to the Transmit Shift registerU1STAbits.UTXBRK = 0; // Operate U1Tx Normally on Transmit Break BitU1STAbits.UTXEN = 1; // Enable U1 TranmissionU1STAbits.URXISEL = 0; // Interrupt flag bit is set when Receive Buffer is 3/4 full (i.e., has 1 data characters)// putsUART1((unsigned int *)”UART Ready”);}void putsUART1(unsigned int *buffer){char * temp_ptr = (char *) buffer; // transmit till NULL character is encounteredif(U1MODEbits.PDSEL == 3) // check if TX is 8bits or 9bits{while(*buffer != ‘