新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于非IDE专用接口芯片的自主型光盘复制机的系统设计

基于非IDE专用接口芯片的自主型光盘复制机的系统设计

作者:时间:2012-02-08来源:网络收藏

4 软件实现

  参考CD-WO规范,CD-WO的写入方式主要有两种:Track at once(轨道)和Disc/Session at once(分区)。这和光盘的信息存放格式分类有极大的关系。在国内,多分区的光盘MULT-SESSION CD如MIXED CD、CD-I等较为少见,它们是数据区和音频区的结合,一般第一个分区与其它分区不同。某些光盘用Track at once能够成功地刻录,而用Disc at once方式则失败;反之亦然。

  通常,Disc at once较为普遍,若写入CUESheet则整个光盘的刻录轨迹位置就固定了。而在实践中发现,对于MIXED-CD用Track at once更容易成功。图3、图4是两种写入方式的简单过程。

  实际的软件编程要比这些复杂。对于经常调用的过程,通常都用汇编语言编写,例如:从寄存器中的读写(Read-Data-Reg,Write-Data-Reg,Read-Status-Reg,Write-CMD-pkt,Write-Task-Ide)等。而针对ATAPI的大多命令,都用C51编写,例如:mode-select(),read-10(ad),write-10(ad),tray-out(),send-cue-sheet()等。

部分执行程序的示例如下:

地址定义部分 ;;IDE Interface Address

例如:IDE_STATUS EQU 81F7H

……

_Read_Status_Reg: ;;读IDE驱动器设备状态子程序

lcall _Drive_Select;选择光驱

……

mov p1,#IDE_Lmode

mov DPTR,#IDE_STATUS

movx @DPTR,a ;DIOR valid

……

mov p1,#Sram64_Lmode

movx A,@DPTR

mov R7,A ;返回状态到r7寄存器

ret

Write_Cmd_Pkt: nop ;写6字命令包子程序

;写6字事先已存入内空间

cmd_buffer

mov R0,#cmd_buffer

mov R1,#06H ;//6 words to write

send_pkt:

mov A,@R0

mov pl,#Sram64_Lmode

mov DPTR,#IDE_DATA_REG

movx @DPTR,A ;//write low byte

inc R0

;//类似的写高字节到16位SRAM

……

;再将16bit从16位SRAM中一次写入IDE设备

mov pl,#IDE_WMode ;select IDE device

mov DPTR,#IDE_DATA_REG

;//16bit packet command write

movx a,@DPTR ;DIOW valid

……

inc R0

djnz R1,send_pkt

ret

void send_cue_sh(USI par_len)

{//ATAPI CD-WO Command,10字节 //命令字节初始化设备

……

do {

status=Read_Status_Reg(drv);

}while(status0x80); //不忙时才可写入

nonDMA_xfer_data 1(); //non DMA(PIO模式)

P1=SRAM32;

status=Read_Status_Reg(drv); //读取返回的状态

if(status0x01) {

rqsense(); //ATAPI Command

}

}/*End of send_cue_sh */

  基于非IDE专用接口芯片的自主型是对目前光盘复制市场的有益补充。其设计要求有较高的单片机、DMA传输以及CPLD等硬件知识和对CD、CDWO格式以及对ATAPI整个命令的了解。


上一页 1 2 下一页

评论


技术专区

关闭