This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

UART0 configuration issue - TMS320C6748 DSP

Other Parts Discussed in Thread: TMS320C6748

Hi,

I am faced with UART0 configuration issue on TMS320C6748. While UART1 works fine, UART 0 dosent. 

Obviously, there is something that I might have missed in configuring UART0 in code below.

please help identify!.

Int Platform_configureUart(void)

{

CSL_SyscfgRegsOvly sysCfgRegs = (CSL_SyscfgRegsOvly)CSL_SYSCFG_0_REGS;

Error_Block eb;
DEV_Params devParams;
Uart_Params uartParams;

/*************************************
* UART0 - BT
*************************************/
uartParams = Uart_PARAMS; /* initialize to defaults. */
uartParams.opMode = Uart_OpMode_POLLED; //Uart_OpMode_INTERRUPT;
uartParams.baudRate = Uart_BaudRate_115_2K;
uartParams.hwiNumber = 8; // Event 38 (UART0_INT) => ECM.eventGroupHwiNum[1] = 8;
uartParams.rxThreshold = Uart_RxTrigLvl_1;
uartParams.softTxFifoThreshold = 1;
uartParams.fc.fcType = Uart_FcType_HW;
uartParams.fc.fcParam = Uart_FcParam_AUTO_RTS_CTS;

Psc_ModuleClkCtrl(Psc_DevId_0, CSL_PSC_UART0, TRUE);

Error_init(&eb);

DEV_Params_init(&devParams);
devParams.deviceParams = &uartParams;
devParams.initFxn = &Uart_init;
devParams.devid = 0;
DEV_create("/uart0", &Uart_IOMFXNS, &devParams, &eb);
if(Error_check(&eb))
{
Error_raise(NULL, Error_E_generic, "Error creating /uart0", 0);
}

/* Enable the pinmux registers for UART0
*
D18 UART_BT_TXD UART0_TXD
C19 UART_BT_RXD UART0_RXD
D16 UART_BT_RTS UART0_RTS OUT
E17 UART_BT_CTS UART0_CTS IN
*/

// RXD
sysCfgRegs->PINMUX3 &= ~CSL_SYSCFG_PINMUX3_PINMUX3_19_16_MASK;
sysCfgRegs->PINMUX3 |= (CSL_SYSCFG_PINMUX3_PINMUX3_19_16_UART0_RXD <<
CSL_SYSCFG_PINMUX3_PINMUX3_19_16_SHIFT);

// TXD
sysCfgRegs->PINMUX3 &= ~CSL_SYSCFG_PINMUX3_PINMUX3_23_20_MASK;
sysCfgRegs->PINMUX3 |= (CSL_SYSCFG_PINMUX3_PINMUX3_23_20_UART0_TXD <<
CSL_SYSCFG_PINMUX3_PINMUX3_23_20_SHIFT);

// CTS
sysCfgRegs->PINMUX3 &= ~CSL_SYSCFG_PINMUX3_PINMUX3_27_24_MASK;
sysCfgRegs->PINMUX3 |= (CSL_SYSCFG_PINMUX3_PINMUX3_27_24_UART0_CTS <<
CSL_SYSCFG_PINMUX3_PINMUX3_27_24_SHIFT);

// RTS
sysCfgRegs->PINMUX3 &= ~CSL_SYSCFG_PINMUX3_PINMUX3_31_28_MASK;
sysCfgRegs->PINMUX3 |= (CSL_SYSCFG_PINMUX3_PINMUX3_31_28_UART0_RTS <<
CSL_SYSCFG_PINMUX3_PINMUX3_31_28_SHIFT);

/*************************************
* UART1 - RS 232
*************************************/
uartParams = Uart_PARAMS; /* initialize to defaults. */
uartParams.opMode = Uart_OpMode_POLLED; //Uart_OpMode_INTERRUPT;
uartParams.baudRate = Uart_BaudRate_115_2K;
uartParams.hwiNumber = 8; // Event 46 (UART_INT1) => ECM.eventGroupHwiNum[1] = 8;
uartParams.rxThreshold = Uart_RxTrigLvl_1;
uartParams.softTxFifoThreshold = 1;
//NOTYET uartParams.fc.fcType = Uart_FcType_HW;
//NOTYET uartParams.fc.fcParam = Uart_FcParam_AUTO_RTS_CTS;

Psc_ModuleClkCtrl(Psc_DevId_1, CSL_PSC_UART1, TRUE);

Error_init(&eb);

DEV_Params_init(&devParams);
devParams.deviceParams = &uartParams;
devParams.initFxn = &Uart_init;
devParams.devid = 1;
DEV_create("/uart1", &Uart_IOMFXNS, &devParams, &eb);
if(Error_check(&eb))
{
Error_raise(NULL, Error_E_generic, "Error creating /uart1", 0);
}

/* Enable the pinmux registers for UART1
*
F19 UART_DBG_TXD UART1_TXD OUT
E18 UART_DBG_RXD UART1_RXD IN
A2 UART_DBG_RTS UART1_RTS OUT
A3 UART_DBG_CTS UART1_CTS IN
*/

// RXD
sysCfgRegs->PINMUX4 &= ~CSL_SYSCFG_PINMUX4_PINMUX4_27_24_MASK;
sysCfgRegs->PINMUX4 |= (CSL_SYSCFG_PINMUX4_PINMUX4_27_24_UART1_RXD <<
CSL_SYSCFG_PINMUX4_PINMUX4_27_24_SHIFT);

// TXD
sysCfgRegs->PINMUX4 &= ~CSL_SYSCFG_PINMUX4_PINMUX4_31_28_MASK;
sysCfgRegs->PINMUX4 |= (CSL_SYSCFG_PINMUX4_PINMUX4_31_28_UART1_TXD <<
CSL_SYSCFG_PINMUX4_PINMUX4_31_28_SHIFT);

// CTS
sysCfgRegs->PINMUX0 &= ~CSL_SYSCFG_PINMUX0_PINMUX0_23_20_MASK;
sysCfgRegs->PINMUX0 |= (CSL_SYSCFG_PINMUX0_PINMUX0_23_20_UART1_CTS <<
CSL_SYSCFG_PINMUX0_PINMUX0_23_20_SHIFT);

// RTS
sysCfgRegs->PINMUX0 &= ~CSL_SYSCFG_PINMUX0_PINMUX0_19_16_MASK;
sysCfgRegs->PINMUX0 |= (CSL_SYSCFG_PINMUX0_PINMUX0_19_16_UART1_RTS <<
CSL_SYSCFG_PINMUX0_PINMUX0_19_16_SHIFT);
return Startup_DONE;
}

  • further...

    If I reverse the sequence of UART initialization ( UART1 followed by UART0) then UART0 works and UART1 dosent.

  • Hi Ashish,

    Thanks for your post.

    I have a clarification on the code posted above:

    How come two different event no's Event 38 (UART0_INT) & Event 46 (UART_INT1), but the HWI no is 8 for both both events 38 & 46 mapped to UART0 & UART1 respectively. The code snippet is as below:

    uartParams.hwiNumber = 8; // Event 38 (UART0_INT) => ECM.eventGroupHwiNum[1] = 8;

    uartParams.hwiNumber = 8; // Event 46 (UART_INT1) => ECM.eventGroupHwiNum[1] = 8;

    I have reviewed your UART0 & 1 configuration for the pinmux register and it seems to be fine.

    I wonder, how could two events no's 38 & 46 for both UART0 & 1 mapped to same hwi no. 8? If both are mapped to same HWI no, then, i guess, only one would be active at a time and it takes the one which is configured first as default and ignores the other.

    Thanks & regards,

    Sivaraj K

    -------------------------------------------------------------------------------------------------------
    Please click the Verify Answer button on this post if it answers your question.
    -------------------------------------------------------------------------------------------------------

     

  • Hi Sivaraj,

    Thank you for the reply.

    I have coded based on "biospsp_03_00_01_00\drivers\examples\evm6748\uart\src\uartSample_main.c"

    According to the example, I have mapped the ECM.eventGroupHwiNum[] to hardware interrupts 7, 8 9 10 as bellow

    ECM.eventGroupHwiNum[0] = 7;
    ECM.eventGroupHwiNum[1] = 8;
    ECM.eventGroupHwiNum[2] = 9;
    ECM.eventGroupHwiNum[3] = 10;

    Now, since UART0 (event38) and UART1(event 46) both map to EVT1 (refer -Table 7-2. System Event Mapping in TMS320c674x MegaModule.pdf). I had set HWI the same for both UART0 and UART1.

    btw- I also tried with setting different HWI for UART0 and 1.. same result.

     

    regards,

    Ashish

     

     

     

     

  • Ashish, I have a similar problem. How did you solve it? TI, why did you not reply to Ashish?

  • Actually, I found the reason why this was happening in my code. I was calling function Uart_init(); in both UART initialization functions. Uart_init(); erases the UART instances table. It erases the values filled by the creation of the first UART instance when it is called again during the creation of the second UART instance.

  • Ashish code has exactly the same mistake that mine had, so that is why the first UART instance does not work.
  • Thanks Mayela for posting the solution.

  • Mayela & Ashish,
    Thanks for your solutions.
    It could help others too.