📄 image_3rd_computer_1012.s43
字号:
clr.b &P5DIR ;数据从FIFO到430
bis.b #RCLK,&P4OUT ;首先将RCLK拉高
bic.b #REN,&P4OUT ;允许FIFO输出
bic.b #EN_5V_com,&P3OUT ;打开通信5V,供给RS232板
mov #0,R5
TJ0 bic.b #RCLK,&P4OUT
TJ1 bit.b #UTXIFG0,&IFG1 ;USART0 TX buffer 准备好了吗?
jz TJ1 ;如果没有准备好则跳转
mov.b &P2IN,&TXBUF0 ;将数据发送到缓冲区
bis.b #RCLK,&P4OUT
inc R5 ;缓冲区地址加1
cmp #3,R5
jlo TJ0
bit.b #EF_FIFO,&P4IN ;读完了吗?
jnz TJ0
;再读一个数据
bic.b #RCLK,&P4OUT
TJ1_2 bit.b #UTXIFG0,&IFG1 ;USART0 TX buffer 准备好了吗?
jz TJ1_2 ;如果没有准备好则跳转
mov.b &P2IN,&TXBUF0 ;将数据发送到缓冲区
bis.b #RCLK,&P4OUT
inc R5 ;缓冲区地址加1
; bis.b #EN_5V_com,&P3OUT ;关闭通信5V
pop R5
pop R13
pop R14
pop R15
RET
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
READOUT_36060
;-----------------------------------------------------------------------------
;test 下面试着将所有寄存器中的数据读到0x400h至0x6FFh中
push R15
push R13
mov #REG_36060,R15
clr.b R13
;写高位地址
RO3_1
mov.b #0FFh,&P5DIR ;P5口先全置为输出
bic.b #03h,&P5OUT ;准备输出高位地址为00
CALL #WR_1byte_36060_HI ;将高位地址写入36060
mov.b R13,&P5OUT ;注释标记段长度
CALL #WR_1byte_36060_LO
CALL #RD_1byte_36060
cmp.b #0FFh,R13
jeq RO3_2
inc.b R13
inc R15
jmp RO3_1
RO3_2
pop R13
pop R15
RET
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
CONFIG_ZR36060
;-----------------------------------------------------------------------------
push R15 ;存430里的存储地址
push R14 ;存寄存器地址
push R13
push R7
mov #REG_36060,R15
bis.b #Sleep_36060,&P1DIR
bis.b #START_36060,&P6DIR
bic.b #EN_Image,&P1OUT ;打开ZR36060的3.3V
bis.b #ADDR0+ADDR1,&P6DIR
bis.b #Reset_36060,&P1DIR
bis.b #RD+WR,&P6DIR ;Reset/WR/RD/ADDR0/ADDR1均置为输出
bic.b #ACK,&P1DIR ;ACK置为输入
bis.b #RD+WR,&P6OUT ;WR/RD缺省为1
;应该在此处进行复位
bis.b #Reset_36060,&P1OUT
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
bic.b #Reset_36060,&P1OUT
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
bis.b #Reset_36060,&P1OUT
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
;注意由于ZR36060需要在睡眠状态稳定内部锁相环,所以上电后至少需要进入睡眠状态一次
bic.b #Sleep_36060,&P1OUT
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
mov #10,&WAIT_TIME
CALL #DELAY_LOOP
bis.b #Sleep_36060,&P1OUT
; CALL #READOUT_36060
;;;;!!!!!!!!!!!!
;先写入寄存器地址
;写高位地址
mov.b #0FFh,&P5DIR ;P2口先全置为输出
bic.b #03h,&P5OUT ;准备输出高位地址为00
CALL #WR_1byte_36060_HI ;将高位地址写入36060
;写寄存器低位地址
mov.b #00h,&P5OUT ;给寄存器000写入0
CALL #WR_1byte_36060_LO ;将低位地址写入36060
mov.b #00h,&P5OUT ;主要是将SyncRst不复位
CALL #WR_1byte_36060_DATA
;寄存器0x002写入0
;选择code slave mode,8bit code bus
mov.b #02h,&P5OUT ;寄存器0x002写入0
CALL #WR_1byte_36060_LO ;将低位地址写入36060
mov.b #01h,&P5OUT ;控制码字主模式,8位
CALL #WR_1byte_36060_DATA
;寄存器0x003写入11000100,相当于Auto Two-Pass Compression
mov.b #03h,&P5OUT ;寄存器0x003写入11000100
CALL #WR_1byte_36060_LO ;将低位地址写入36060
; mov.b #0C4h,&P5OUT ;Auto Two-Pass Compression
mov #MEM_36060+3,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #04h,&P5OUT ;寄存器0x003写入11000100
CALL #WR_1byte_36060_LO ;将低位地址写入36060
mov.b #00h,&P5OUT ;must be 00h
CALL #WR_1byte_36060_DATA
;;;;;;;;0x005h还应该再看看
mov.b #05h,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #020h,&P5OUT ;控制文件大小
mov #MEM_36060+5,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;寄存器0x006写入00111000,将DRI、DQT、DHT都包含在标志段中,APP、COM段不包括
mov.b #06h,&P5OUT ;寄存器0x006写入00111000
CALL #WR_1byte_36060_LO
; mov.b #038h,&P5OUT ;包含DHT、DQT、DRI表
mov #MEM_36060+6,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;;;;;;;;0x007h还应该再看看
mov.b #07h,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
mov.b #00h,&P5OUT ;禁止所有中断
CALL #WR_1byte_36060_DATA
;;;;;;;;0x008h还应该再看看
;;;;;;;;0x009h~0x00Ch还应该再看看
mov.b #09h,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #0FFh,&P5OUT
mov #MEM_36060+9,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #0Ah,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #00h,&P5OUT
mov #MEM_36060+10,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #0Bh,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #0F7h,&P5OUT
mov #MEM_36060+11,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #0Ch,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #00h,&P5OUT
mov #MEM_36060+12,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;;;;;;;;0x00Dh~0x010h还应该再看看
mov.b #0Dh,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #00h,&P5OUT
mov #MEM_36060+13,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #0Eh,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #08h,&P5OUT
mov #MEM_36060+14,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #0Fh,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #0FFh,&P5OUT
mov #MEM_36060+15,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #010h,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #00h,&P5OUT
mov #MEM_36060+16,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;;;;;;;;0x011h~0x012h还应该再看看
mov.b #011h,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #00h,&P5OUT
mov #MEM_36060+17,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #012h,&P5OUT ;寄存器0x007写入0
CALL #WR_1byte_36060_LO
; mov.b #001h,&P5OUT
mov #MEM_36060+18,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;寄存器0x013h~0x015h写入0xFFFFFF,初始化的要求
mov.b #013h,&P5OUT ;给寄存器0x13h写入FF
CALL #WR_1byte_36060_LO
mov.b #0FFh,&P5OUT
CALL #WR_1byte_36060_DATA
mov.b #014h,&P5OUT ;给寄存器0x14h写入FF
CALL #WR_1byte_36060_LO
mov.b #0FFh,&P5OUT
CALL #WR_1byte_36060_DATA
mov.b #015h,&P5OUT ;给寄存器0x15h写入FF
CALL #WR_1byte_36060_LO
mov.b #0FFh,&P5OUT
CALL #WR_1byte_36060_DATA
mov.b #024h,&P5OUT ;寄存器0x0024写入0
CALL #WR_1byte_36060_LO
mov.b #00h,&P5OUT
CALL #WR_1byte_36060_DATA
mov.b #025h,&P5OUT ;寄存器0x025写入0
CALL #WR_1byte_36060_LO
mov.b #00h,&P5OUT
CALL #WR_1byte_36060_DATA
;寄存器0x030h写入10001010,
;由外部提供视频同步信号,通过FI管脚区分奇偶场,视频场开始标志为VSYNC上升沿,
;FI为高表示奇场,象素值为0~255,8位视频总线
mov.b #030h,&P5OUT ;给寄存器0x30h写入8E
CALL #WR_1byte_36060_LO
; mov.b #08Eh,&P5OUT
mov #MEM_36060+48,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;寄存器0x031h写入01000111,
;垂直与水平同步脉冲均为高电平有效,FI为高表示奇场,PVALID为高时表示有效象素
mov.b #031h,&P5OUT ;给寄存器0x31h写入47
CALL #WR_1byte_36060_LO
; mov.b #05Dh,&P5OUT
mov #MEM_36060+49,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;寄存器0x032h写入00,
;垂直与水平方向均无压缩
mov.b #032h,&P5OUT ;给寄存器0x32h写入00
CALL #WR_1byte_36060_LO
; mov.b #00h,&P5OUT
mov #MEM_36060+50,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
;寄存器0x042h(Vstart15:8)写入00,0x043(Vstart7:0)写入11,0x044(Vend15:8)写入00,0x45(Vend7:0)写入255,
;垂直有效象素区间为12:255
;寄存器0x046h(Hstart15:8)写入00,0x047(Hstart7:0)写入2,0x048(Hend15:8)写入00,0x49Hend7:0)写入255,
;水平有效行区间为3:255
mov.b #042h,&P5OUT ;给寄存器0x42h写入00
CALL #WR_1byte_36060_LO
; mov.b #0,&P5OUT
mov #MEM_36060+66,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
mov.b #043h,&P5OUT ;给寄存器0x43h写入11
CALL #WR_1byte_36060_LO
; mov.b #028h,&P5OUT
mov #MEM_36060+67,R7
mov.b 0(R7),&P5OUT ;控制文件大小
CALL #WR_1byte_36060_DATA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -