EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Replies / dsPIC30F5011 /

dsPIC30F5011 /

|

Microcontroller › PIC › More than four character Rx and Tx through UART › dsPIC30F5011 /

August 7, 2013 at 6:12 am #10292
varma
Participant
dsPIC30F5011 / MPLAB8.8
 
 
HI, 
 
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 register
    U1STAbits.UTXBRK = 0;    // Operate U1Tx Normally on Transmit Break Bit
    U1STAbits.UTXEN   = 1;    // Enable U1 Tranmission   
   
    U1STAbits.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 mode
    U1MODEbits.ALTIO = 0;    // UART communicates usingalternate UxTX and UxRX I/O pins
    U1MODEbits.WAKE = 1;    // Enable Wake up
    U1MODEbits.LPBACK = 0;    // Disable Loop Back
    U1MODEbits.ABAUD = 0;    // Disable Auto Baud
    U1MODEbits.PDSEL = 0;    // 8 Bit Data, No Parity
    U1MODEbits.STSEL = 0;    // 1 Stop Bit
    
    IPC2bits.U1TXIP = 7;    // Tx priority level.
    IPC2bits.U1RXIP = 7; // Rx priority level.
    
    U1MODEbits.UARTEN = 1;    // Enable UART
    
    IEC0bits.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 register
    U1STAbits.UTXBRK = 0;    // Operate U1Tx Normally on Transmit Break Bit
    U1STAbits.UTXEN   = 1;    // Enable U1 Tranmission   
   
    U1STAbits.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 encountered      
if(U1MODEbits.PDSEL == 3)                  // check if TX is 8bits or 9bits
{      
while(*buffer != ‘’)
{
        while(U1STAbits.UTXBF); // wait if the buffer is full
                 U1TXREG = *buffer++;     // transfer data word to TX reg
        }
    }
    else 
{
             while(*temp_ptr != ‘’) 
        {
                 while(U1STAbits.UTXBF);   // wait if the buffer is full 
                 U1TXREG = *temp_ptr++;    // transfer data byte to TX reg 
             }
    }
}
 
 
void __attribute__((__interrupt__,no_auto_psv)) _U1TXInterrupt(void) // This is UART1 transmit ISR
{
    IFS0bits.U1TXIF = 0;
    
    
}
 
void __attribute__((__interrupt__,no_auto_psv)) _U1RXInterrupt(void) // This is UART1 receive ISR
{
     IFS0bits.U1RXIF = 0;
     for(j=0;j<=24;j++)
         buf[j]=ReadUART1();
         
              putsUART1((unsigned int*)buf);
        
} 
 
</code>

RSS Recent Posts

  • Display TFT ST7789 (OshonSoft Basic). July 10, 2025
  • Fixing board, Easy question HEX SCHMITT July 10, 2025
  • Can I make two inputs from one?? July 10, 2025
  • Home Smoke detectors are all Beeping Batteries are not dead.??? July 9, 2025
  • The Analog Gods Hate Me July 9, 2025

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2025 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise