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.

UART1 Driver Loading Issues

Other Parts Discussed in Thread: OMAP-L138

Hi,

In our custom hardware we are using UART1 isntead of UART2.

I want to validate the UART1 Driver in WInCE 6.0 R3.

For this I have modified the registry settings as given below

IF

 

 

BSP_SERIAL

IF

 

 

BSP_SERIAL1

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial1]

"Prefix"="COM"

"Index"=dword:1

"Order"=dword:9

"DeviceArrayIndex"=dword:1

"Priority256"=dword:67

"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"

"Dll"="serialdrvr.dll"

"RtsCtsFlowCtl"=dword:0

ENDIF

 

BSP_SERIAL1

ENDIF

I checked in NK.bin that the registry entries are present.

It runs without any issues till CPdd16550::PostInit() function which is present in the following path C:\WINCE600\public\common\oak\drivers\serial\oo16550\pdd16550.cpp

As soon as ThreadStart is executed from the PostInit it never returns to it.

Looks the target hung at that point...After that nothing comes up...

Any suggestions on this? The last message from PB Debug Output window is the following

4294787667 PID:400002 TID:1050002 COMAPL13xSerial::SetDevicePowerState: Setting power state: -1

Regards,

GSR

  • Hi,

    One more observation is it lands up in DWORD COMAPL13xSerial::ThreadRun() which is available in c:\WINCE600\PLATFORM\COMMON\SRC\SOC\OMAPL13X_TI_V1\SERIAL\serial.cpp

    further debugging it looks that the 

    while(!IsTerminated() &&((bData = m_pReg16550->Read_IIR()) & SERIAL_IIR_INT_INVALID)==0) is executing continuously and it enters into SERIAL_IIR_MS switch case.

    Let me know your thoughts...I am not using RTS and CTS in my device... Also reading

    It keep on entering that loop and IIR returns 0xC0. Although the UART datasheet doesn't say anything about the value 0x0 (Bits 3 to 0), the code considers it as Modem Interrupt. Reading MSR returns 0x11. The running code never able to clear this.

    The other difference between OMAP-L138 from LogicPD and our HW is we are running ARM at 324MHz. So SYSCLK2 = 162MHz. Divider for generating 115200 baud rate we have used value 87. Which gives baud rate equals to 116379 with error percentage equals to 1%.

    Please let me know even though we are not using UART1_CTS and RTS why the modem interrupt occurs?

    Using Pinmux registers we have configured UART1_RTS as GP0[11] and UART1_CTS as AHCLKX.

    Regards,

    GSR

     

  • Hi,

    Any inputs please...

    Regards,

    GSR

  • Looks like you already found out the issue being the driver is continuously getting the MS interrupt.  You might want to compare how the uarts are connected on the LogicPD EVM with your custom board.  You may also want to post the question to the OMAPL1X processors forum to see if there is any further suggestion why the MS interrupts are generated continuously.

    Regards

    WM