阅读:1534回复:0
求助:smdk2440串口驱动程序的问题【请各位大侠帮帮忙】
问题现象:
在串口0得不到数据? 问题描述: J:\WINCE420\PLATFORM\smdk2440\DRIVERS\serial\SER2440_HW.C中的函数SL_TxIntrEx 里面添加两个打印语句: unsigned int i, tmpreg; //原有 //<****************************************************************************************************>// //开始写数据 pHWHead->pUFTXH 指向--> v_pUART0regs->rUTXH RETAILMSG(DEBUGMODE, (TEXT("\n************* reg address *************\r\n"))); RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - pHWHead->pUFTXH = 0x%x [address]\r\n"), pHWHead->pUFTXH)); RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - &v_pUART2regs->rUTXH = 0x%x [address]\r\n"), &(v_pUART2regs->rUTXH))); RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - &v_pUART0regs->rUTXH = 0x%x [address]\r\n"), &(v_pUART0regs->rUTXH))); *(pHWHead->pUFTXH) = *pTxBuffer; //原有 RETAILMSG(DEBUGMODE, (TEXT("\n************* reg value *************\r\n"))); RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - *pTxBuffer = 0x%x [value]\r\n"), *pTxBuffer)); //原有 RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - *pHWHead->pUFTXH = 0x%x [value]\r\n"), *(pHWHead->pUFTXH))); RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - v_pUART0regs->rUTXH = 0x%x [value]\r\n"), v_pUART0regs->rUTXH)); RETAILMSG(DEBUGMODE, (TEXT("SL_TxInt - v_pUART2regs->rUTXH = 0x%x [value]\r\n"), v_pUART2regs->rUTXH)); 2、并定义DEBUGMODE为1 #define DEBUGMODE 1 测试程序代码是: HANDLE hSerial; char name[2]; unsigned long dwNumBytes=0; //BOOL flag; printf("\n\n************************************\n"); printf("********* 串口测试 **********\n"); printf("************************************\n\n"); hSerial = CreateFile(L"COM1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); //串口打开失败 if(hSerial == NULL) { printf("串口打开失败\n"); return 0; } ///配置串口 DCB PortDCB; PortDCB.DCBlength = sizeof(DCB); // 默认串口参数 GetCommState(hSerial, &PortDCB); PortDCB.BaudRate = 115200; // baud PortDCB.ByteSize = 8; // Number of bits/byte, 4-8 PortDCB.Parity = NOPARITY; PortDCB.fDtrControl = DTR_CONTROL_DISABLE; PortDCB.fRtsControl = RTS_CONTROL_DISABLE; PortDCB.StopBits = ONESTOPBIT; //配置串口失败 if (! SetCommState(hSerial, &PortDCB)) { printf("配置串口失败\n"); return 0; } ////配置超时值 COMMTIMEOUTS CommTimeouts; GetCommTimeouts(hSerial, &CommTimeouts); CommTimeouts.ReadIntervalTimeout = MAXDWORD; CommTimeouts.ReadTotalTimeoutMultiplier = 10; CommTimeouts.ReadTotalTimeoutConstant = 10; CommTimeouts.WriteTotalTimeoutMultiplier = 50; CommTimeouts.WriteTotalTimeoutConstant = 100; //不能设置超时参数 if (!SetCommTimeouts(hSerial, &CommTimeouts)) { printf("不能设置超时参数\n"); return 0; } int i=10; int j; for(j=0;j<i;j++) { strcpy(name,"d"); //name='d'; printf("name 信息是%s\n",name); if(!WriteFile(hSerial,name,sizeof(name),&dwNumBytes,NULL)) printf("\n WriteFile 出错 error %d\n",GetLastError()); printf(" 写了字节数dwNumBytes是%d\n",dwNumBytes); Sleep(10); } if(hSerial != NULL) { if(!CloseHandle(hSerial)) printf("关闭串口失败\n"); hSerial=NULL; } 3、下面调试口打印的信息: SL_SetDCB : BaudRate is 9600 SL_SetDCB : Set ByteSize is 8 SL_SetDCB : Set Parity is 0 SL_SetDCB : Set StopBits is 0 -SL_SetDCB 0x36AA0 +SL_SetCommTimeout 0x36AA0 -SL_SetCommTimeout 0x36AA0 SerOpen - Bootargs ComPort 0 Use Serail +SerSetOutputMode -SerSetOutputMode SerOpen - Calling SL_Open SL_Open 0x36AA0 (0 opens) S2440_SetIOP : SERIAL S2440_SetSerialIOP +SL_SetbaudRate 0x36AA0, 9600 ClearPendingInts SetBaudRate -> 9600 -SL_SetbaudRate 0x36AA0 (9600 Baud) +SL_SetByteSize 0x36AA0, 0x8 -SL_SetByteSize 0x36AA0 +SL_SetStopBits 0x36AA0, 0x0 -SL_SetStopBits 0x36AA0 +SL_SetParity 0x36AA0, 0x0 -SL_SetParity 0x36AA0 ClearPendingInts SL_PostInit ClearPendingInts ReadLSR Line Status Register : 0x0 SerOpen - Return TRUE +SL_PurgeComm 0x8 SL_SetDCB : BaudRate is 115200 SL_SetDCB : Set ByteSize is 8 SL_SetDCB : Set Parity is 0 SL_SetDCB : Set StopBits is 0 SL_SetDCB : Set BaudRate to 115200 +SL_SetbaudRate 0x36AA0, 115200 ClearPendingInts SetBaudRate -> 115200 -SL_SetbaudRate 0x36AA0 (115200 Baud) -SL_SetDCB 0x36AA0 +SL_ClearDTR, 0x36AA0 UseIrDA, 0 -SL_ClearDTR, 0x36AA0 +SL_ClearRTS, 0x36AA0 -SL_ClearRTS, 0x36AA0 +SL_SetCommTimeout 0x36AA0 -SL_SetCommTimeout 0x36AA0 SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x10002800, 0x49A, 0x0, 0x1 SL_GetInterruptType: INTR_TX SL_TxIntrEx SL_GetInterruptType : 0x79C13F18, 0x4FA, 0x2800, 0x49A, 0x0, 0x0 SL_GetInterruptType: INTR_NONE(pHWHead->bINT) SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 SL_TxIntrEx SL_TxIntrEx : 2 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x64 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x64 ************* reg address ************* SL_TxInt - pHWHead->pUFTXH = 0x2d0020 [address] SL_TxInt - &v_pUART2regs->rUTXH = 0x2f0020 [address] SL_TxInt - &v_pUART0regs->rUTXH = 0x2d0020 [address] ************* reg value ************* SL_TxInt - *pTxBuffer = 0x0 [value] SL_TxInt - *pHWHead->pUFTXH = 0x0 [value] SL_TxInt - v_pUART0regs->rUTXH = 0x0 [value] SL_TxInt - v_pUART2regs->rUTXH = 0x0 [value] SL_TxInt - *pTxBuffer = 0x0 +SerClose +SerSetOutputMode -SerSetOutputMode SL_Close +SL_ClearRTS, 0x36AA0 -SL_ClearRTS, 0x36AA0 S2440_SetIrDAIOP -SerClose 为什么在串口0得不到数据? |
|