存档

2008年6月 的存档

关于SBC2410板子的串口

2008年6月30日

回家了一个星期,就算是放过暑假了,明天开始去实验室~~~

回家之前一天一直在折腾SBC2410这块板子的串口,以前这个串口程序是调出来的,程序都有以前写好的,但是烧在板子上PC机就是收不到数据,所以一直怀疑是我新买的PALM的USB转串口线有问题。在家的时候买了一台示波器,找了一根串口的对接线用来连接PC和示波器,测试发现我的USB转串口是好的,而且超级稳定,但是很奇怪,用这根线没法让两台电脑进行串口通讯,于是开始怀疑是线的问题,家里找不到万用表,所以一直拖到现在。

回南京之后,用示波器看了下SBC2410板子的串口,单次触发,得到的结果竟然是板子上2号脚是发送,难怪之前不能用。又用万用表测了一下家里用来连接PC和示波器的那个串口母对母的线,竟然是直连线,2号和3号没有交叉,难怪不能两台计算机通讯。

结论:1、SBC2410和示波器的串口都是公口,但都和电脑上的公口定义不一样。
2、串口母对母的线是直连线,不能进行双机通讯(这点目前仅限我手头上的这根,但是我觉得估计都是这样。。。。)
3、PALM的USB转串口线可以用。

附串口各引脚定义:
Pin Name Dir Description
1 CD Carrier Detect
2 RXD Receive Data
3 TXD Transmit Data
4 DTR Data Terminal Ready
5 GND System Ground
6 DSR Data Set Ready
7 RTS Request to Send
8 CTS Clear to Send
9 RI Ring Indicator

over

Jacob 技术

重新编译SJF2410以适应NM9805并口卡(PCMICIA接口)

2008年6月23日

H-Jtag软件自带的H-Flasher只提供了烧写Nor-Flash的功能,并不能烧写Nand等,很庆幸SJF2410提供了C++源代码,立马装了个VC对代码进行重编译以适应我的PCI转出来的并口卡,简单的来说就是将默认的378地址改成我的FFE8。

主要要改的是两个文件

1、ppt.h

源代码如下,可以看到默认的LPT1-3地址都在上面,将2和3删去,将LPT1地址改为0xFFE8
#ifndef __PPT_H__
#define __PPT_H__

int GetValidPpt(void);
int InstallGiveIo(void);
void SetPptCompMode(void);

extern int validPpt;

#define LPT1 0×378  // the search order is LPT1 then 2 then 3
#define LPT2 0×278  // first valid address found is used (re-order if needed for multiple ports)
#define LPT3 0×3bc  // hardware base address for parallel port

#define OutputPpt(value)    _outp((unsigned short)validPpt,value)
#define InputPpt()      _inp((unsigned short)(validPpt+0×1))

#endif //__PPT_H__

如下:

#ifndef __PPT_H__
#define __PPT_H__

int GetValidPpt(void);
int InstallGiveIo(void);
void SetPptCompMode(void);

extern int validPpt;

#define LPT1 0xFFE8
#define OutputPpt(value)    _outp((unsigned short)validPpt,value)
#define InputPpt()      _inp((unsigned short)(validPpt+0×1))

#endif //__PPT_H__

2、PPT.c
按道理来说改完上面的就可以用了,但是不知道为什么,编译后还是提示找不到并口,于是手动将LPT1返回。
涉及到的函数是int GetValidPpt(void)。
源代码:

int GetValidPpt(void)
{
// search for valid parallel port
_outp(LPT1, 0×55);
if((int)_inp(LPT1) == 0×55)
return LPT1;

_outp(LPT2, 0×55);
if((int)_inp(LPT2) == 0×55)
return LPT2;

_outp(LPT3, 0×55);
if((int)_inp(LPT3) == 0×55)
return LPT3;

return LPT1;
}

修改后:

int GetValidPpt(void)
{
// search for valid parallel port
return LPT1;
}

Jacob 技术

解惑–关于笔记本的PC卡转并口端口地址不能更改的问题

2008年6月22日

如果你是找解决方法找到这个帖子的,那么很遗憾,我解决不了这个问题。现在我只是想说说为什么解决不了。

去年底,还在无锡的时候,程杰买了一个PCMCIA的并口卡,100多块,结果因为不能更改IO地址,仿真软件都没法识别到PC卡的并口,所以后来又退掉了,只是那时候我还用着我的老联想,所以没在意怎么解决。现在新换的X60没有并口,这让我很郁闷,所有的仿真器都用不了了,突然需要用到了并口,虽然知道PCMCIA卡转出来的并口不好用,但是还是禁不住诱惑买了一块回来做测试。

今天上午10点的样子收到卡到现在一直在研究这块卡,但是得出来的结论是依然无法改端口地址。至于原因,我想是这样子的,这块卡的驱动芯片是NM9805(据我所知,市面上卖的卡都是这个驱动芯片),这个芯片是基于PCI接口的(废话,插在PC卡上),地址范围当然是在PCI16位地址内。而378/278那个地址是系统保留给主板自带并口使用,不会分配给 PCI转接卡使用的。所在没有办法改。

但他们的功能是一样的,仅是操作地址不同。只要能在软件里将所操作的并口地址改为uPnP分配到的地址就可以正常工作。

目前为止我只找到了一款软件能更改并口地址,就是H-Jtag,所以我的这块卡就变成了ARM专用了,呵呵。。。

Jacob 技术

8086汇编写的七段数码管程序

2008年6月16日

考G的前几天,我妹妹找我写8086程序,说是课程设计,一直拖到现在才写,没有调试环境也不知道结果对不对。

题目是这样的:
系统实验平台上的七段数码管显示是采用共阴极。参考资料如下:

图1-1共阴共阳极数码管

相应的驱动显示数据如表1-1所示

表1-1共阴共阳极数码管段码

现要求:利用8255A的A口接开关量,利用两个数码管分别显示A口的开关量的数值。如A口的开关量为0101 0011,则这两个数码管的显示数值为:53;如果如A口的开关量为1111 1010,则这两个数码管的显示数值为:FA;依次类推。(本题只要求显示0-F共16个)。
(1)、请设计线路图,并画出连接线路图。
(2)、完成完整的程序。
(3)、验证设计的结果。

注:
实验平台上的8255A端口地址是:A口是60H;B口是61H;C口是62H;控制口是63H

这是我写的程序:

;课程设计一:七段数码管
;题目要求:利用8255A的A口接开关量,利用两个数码管分别显示A口的开关量的数值。如A口的开关量为0101 0011,
;          则这两个数码管的显示数值为:53;如果如A口的开关量为1111 1010,则这两个数码管的显示数值为:
;          FA;依次类推。(本题只要求显示0-F共16个)。
;程序说明:本程序为8086汇编程序,使用两个共阴数码管显示8255A口所接的开关量,硬件连接如下:
;          8255的A口接开关量,B口接两个共阴数码管的a-g,dp,C口低二位分别接两个数码管的公共
;          端作为片选信号。(电路图略)

OUTPORT1 EQU 63H    ;8255控制寄存器端口地址
OUTPORTA EQU 60H    ;A口地址
OUTPORTB EQU 61H    ;B口地址
OUTPORTC EQU 62H    ;C口地址
DATA SEGMENT      ;LED为共阴七段数码管码表
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT        ;定义代码段
ASSUME CS:CODE,DS:DATA
START:    MOV AX,DATA
MOV DS,AX

MOV AL,10010000B  ;控制字,方式0,A口输入,B口、C口输出
MOV DX,OUTPORT1    ;控制寄存器端口送DX
OUT DX,AL      ;控制字送8255

MOV DX,OUTPORTA    ;读取端口A
IN AL,DX      ;

MOV BL,AL      ;保留读取值

MOV CL,04      ;取低四位
SHL AL,CL
SHR AL,CL
LEA BX,LED      ;DATA送BX
XLAT        ;查表

MOV DX,OUTPORTB    ;B口地址送DX
OUT DX,AL      ;数据送B口显示
MOV AL,02H      ;送位码02H至C口
MOV DX,OUTPORTC    ;C口地址送DX
OUT DX,AL      ;C口输出

CALL DELAY      ;小延时

MOV AL,BL      ;恢复已读取的数据
MOV CL,04      ;取高四位
SHR AL,CL
LEA BX,LED      ;DATA送BX
XLAT        ;查表
MOV DX,OUTPORTB    ;B口地址送DX
OUT DX,AL      ;数据送B口显示
MOV AL,01H      ;送位码01H至C口
MOV DX,OUTPORTC    ;C口地址送DX
OUT DX,AL      ;C口输出

CALL DELAY      ;小延时

JMP START      ;循环

DELAY  PROC      ;小延时子程序
PUSH CX
PUSH AX
MOV AX,6
X1:  MOV CX,0ffFH
X2:  DEC CX
JNE X2
DEC AX
JNE X1
POP AX
POP CX
RET
DELAY ENDP

CODE ENDS      ;代码段结束
END START      ;源程序结束

Jacob 技术