多串口芯片16550驱动移植到s3c6410上

1 上周搞定在6410上的wince6.0的16550驱动。在注册表中增加串口信息,以下就是一个串口的注册表信息

[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial4]
 "DeviceArrayIndex"=dword:4
 "Irq"=dword:40    ; 
 "MemBase"=dword:7F005C00

 "MemLen"=dword:40
 "ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
 "Prefix"="COM"
 "Index"=dword:5
 "Dll"="mycom16550.Dll"
 "Order"=dword:30
 "Port"="COM5:"
 "DeviceType"=dword:0
 "FriendlyName"="serial5"
 "Tsp"="unimodem.dll"
 "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
 "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
;--------------------------------------------------------------------------

红色部分是根据自己平台需要修改的

 

2 由于并不需要动态加载驱动,可以把下面红色部分注销掉

 

CSerialPDD * CreateSerialObject(LPTSTR lpActivePath, PVOID pMdd,PHWOBJ pHwObj, DWORD DeviceArrayIndex)
{

#if 0
    CSerialPDD * pSerialPDD = NULL;
    if (DeviceArrayIndex == 0 ) {
        pSerialPDD = new CPdd16550Isr(lpActivePath,pMdd, pHwObj);
        if (pSerialPDD && !pSerialPDD->Init()) {
            delete pSerialPDD;
            pSerialPDD = NULL;
         }
    }

#endif
    if (pSerialPDD == NULL) {
        pSerialPDD= new CPdd16550(lpActivePath,pMdd, pHwObj);
        if (pSerialPDD && !pSerialPDD->Init()) {
            delete pSerialPDD;
            pSerialPDD = NULL;
        }
    }
    return pSerialPDD;
}

3 需要增加串口芯片对应的gpio口中断,在中断处理线程DWORD CPdd16550::ThreadRun()中记得重新使能中断,在中断触发上如果采用单边沿触发模式可能会漏中断,漏中断是致命的bug,一旦漏了就没有清除16550的中断寄存器将不再产生接收中断。

 

4 根据不同的晶振修改波特率表,reg = 晶振频率/16/波特率。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值