Spca718 iop
This presentation is the property of its rightful owner.
Sponsored Links
1 / 31

基于 SPCA718 的 IOP 实现 PowerPoint PPT Presentation


  • 130 Views
  • Uploaded on
  • Presentation posted in: General

SUNPLUS TECHNOLOGY FOR EASY LILE. 基于 SPCA718 的 IOP 实现. 数码影音二部 吴中建 2004/04/28 E-MAIL:[email protected] SUNPLUS TECHNOLOGY FOR EASY LILE. 目录. IOP 的功能 6502常用指令搭配简介 IOP 的内存的分配 IOP、RISC 与 GPIO 的联系 IOP 具体软件的实现 I2C 简介 Q&A. SUNPLUS

Download Presentation

基于 SPCA718 的 IOP 实现

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

基于SPCA718的IOP实现

数码影音二部

吴中建

2004/04/28

E-MAIL:[email protected]


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

目录

  • IOP的功能

  • 6502常用指令搭配简介

  • IOP的内存的分配

  • IOP、RISC与GPIO的联系

  • IOP具体软件的实现

  • I2C简介

  • Q&A


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP的功能

  • IOP is I/O process。是一个8位的MCU,它用做718的中间处理器。

  • 在718中处理一些实时的功能,负责控制周遍的设备,可以响应比较快的动作,减少RISC的负担。

  • 通常用于IR的接受,VFD的键扫和送显,GAME手柄的接收,QCODE的接收,I2C通讯 。


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

6502常用指令搭配简介——寄存器

大多数操作都是在此进行

用于间接寻址


6502 p

SUNPLUS

TECHNOLOGY FOR EASY LILE

6502常用指令搭配简介——状态寄存器(P)

进位标志

负数标志

零标志

溢出标志

中断标志

暂停命令标志

十进制模式标志


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

6502常用指令搭配简介——数的表示

  • 二进制数的表示:

    #%00000001或#00000001B

  • 十进制数的表示:

    #01或#01D

  • 十六进制数的表示:

    #$01或#01H

    寄存器的寻址方式请参考6502_inst.pdf,在此不在赘述。


6502 1

SUNPLUS

TECHNOLOGY FOR EASY LILE

6502常用指令搭配简介——常用指令(1)

1, 位置高、置低指令,

rmb bit, BYTE ;;置低

smb bit, BYTE ;;置高

这两条指令为对某一个BYTE的其中一位置高,置低,这在写OUTPUT 可用

2, 判断某一位高低而转移到不同的分支

bbr bit, BYTE ,标识 ;;若这一BYTE的bit为低,则程序跳转到标识处执行,否则就顺序执行

bbs bit, BYTE , 标识 ;;若这一BYTE的bit 为高,则程序跳转到标识处执行,否则就顺序执行

3, 程序分支语句:

jmp 标识 ;; 它为程序跳转到某一分支执行,跳转的范围较大。

bra 标识 ;; 它为程序跳转到某一分支执行.其实相当与jmp,只是跳转的范围较小。


6502 2

SUNPLUS

TECHNOLOGY FOR EASY LILE

6502常用指令搭配简介——常用指令(2)

4,判断标志位高低而转移到不同的分支

bcc 标识 ;;若c为0,则程序跳转到标识处执行,否则就顺序执行

bcs 标识 ;;若c为1,则程序跳转到标识处执行,否则就顺序执行

beq 标识 ;;若z为1,则程序跳转到标识处执行,否则就顺序执行

bne 标识 ;;若z为0,则程序跳转到标识处执行,否则就顺序执行

5,比较指令,

cmp DATA;该指令主要影响标志位

这条指令为A中的数和DATA的值比较。若A>=DATA,C=1;若A<DATA,C=0;若A=DATA,Z=1。所以,经常和bcs、bcc、beq指令配合使用。cpx、cpy和cmp用法相同。

其余指令请参考6502_inst.pdf文件


Iop i o and cache

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP memory

Cache memory

0

$0

$40

Zero page

$ff

NMI,RESET, IRQ Vector

448 byte

$106

Page 1(Stack Area)

$1ff

$1ff

32 byte

32 byte

32 byte

32 byte

$240

$0 ~$40 (I/O area)

:

512 byte cache

$ffff

Only 2 Direct Mapped Cache line, each 32 bytes

IOP的内存的分配——I/O and cache


Iop io area 00 3f

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP的内存的分配——IO Area ($00 - $3F)

$00 - $07(RW): 64-bit GPIO Values(置高置低)

$08 - $0F(RW): 64-bit GPIO_OE (1 to enable output)(输入输出)

$10 - $1F: RISC-IOP IF Registers (数据交换区)

$20: INTR_MASK (W), (中断使能寄存器)

bit7: NMI, bit2: RISC INTR, bit1: TIMERA bit0: TIMER B

$21: INTR_FLAG (RW)(中断响应寄存器)

bit7: NMI, bit2: RISC INTR, bit1: TIMERA bit0: TIMER B

write 1 to clear interrupt flag

$22-$23: TIMER A (Low-High), (定时器)

write will cause count from 0 to that value, then may generate

interrupt

$24-$25: TIMER B

具体的设置在iop.inc中


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

定时器以初值减,产生溢出中断

Timer A

$22

$23

Intr A

Overflow

Timer B

$24

$25

Intr B

Overflow

SYS_CLK


Iop risc gpio

SUNPLUS

TECHNOLOGY FOR EASY LILE

gpio_sel_aux

gpio_sle

IOP、RISC与GPIO的联系

RISC path:

gpio_oe[4]

gpio_out[4]

gpio_in[4]

GPIO 0~41

gpio_master

Decide GPIO route

IOP path:

$00 ~$0F

Register

Select GPIO control path

1: RISC 0:IOP


Risc i o

SUNPLUS

TECHNOLOGY FOR EASY LILE

RISC 对I/O口如何设置


Iop i o

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP 对I/O口如何设置

1、对I/O的置高、置低需要对应的64bit的空间来控制,对应的位写0-置低;写1-置高。在iop.inc中定义如下:

GPIO_PROT0 EQU $00 ; 对应GPIO0-7

GPIO_PROT7 EQU $07 ;对应GPIO56-63

2、对I/O的输入、输出也需要对应的64bit的空间来控制,对应的位写0-输入;写1-输出。在iop.inc中定义如下:

GPIO_IO0_CFG EQU $08 ;对应GPIO0-7

GPIO_IO0_CFG EQU $08 ;对应GPIO56-63


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP与上层的接口

状态标志

时间中断标记

Ir数据

游戏手柄数据

面板按键码值

IOP_DATA0_L

….

IOP_DATA7_H

(16BYTE)

寄存器

IOP-DATA[8]

Vfd_mem[ ]—sent out

Qcode_data[ ]--recieve

SDRAM space:

Sdram_base+

iopya*1024+0x400

$400--$41f(32BYTE)

$420--$42a(10BYTE)


2 k iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

2K IOP空间具体结构

1:了解Dram中各部分空间很重要,编写程序时请务必有

Stack空间的概念,否则,出现莫名其妙的问题时麻烦

就来了;

2:IOP Code Size亦不能无限扩展,以免冲掉伺服变量

导致系统伺服动作失效。


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——软件的总体架构

Reset

初始化

定时器中断

每100uS发生一次

Virq

{

1,清除中断标志

2,用户的计数变

量递减

3,通过data5提供

上层1ms和10ms

的信号

}

Mainloop

{

Qcode service

Ir service

Vfdr service

Vfdw service

}

中断返回


Iop ir 1

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——IR头码的抓取(1)

  • 判断头码是关键程序

  • 提醒您注意几个地方:

    1,irq.asm中的rIrCountH

    2,rIrCountH与rIrCountLbuf关系。这两个参数在高低电平变化时相互配合,完成时间判定。

    3,注意irq 一次循环100us


Iop ir 2

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——IR头码的抓取(2)

  • 以NEC为例,时间长度的描述。

    例:先9ms LOW,后4.5msHIGH,说明IR HEAD已传来,系统需要接受IR。

rIrCountH记数

~

IR in

定时100US

rIrCountLbuf记数

~

Timer B


Iop ir 3

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——IR头码的判断(3)

  • lda rIrCountLbuf

  • cmp #80

  • bcc Irclearcount;;小于8ms  Irclearcount

  • cmp #98

  • bcs Irclearcount ;;大于9.8ms Irclearcount

    ;;由上判断,将时间限制在8到9.8之间。在此之间,既为:9ms

  • lda rIrCountH

  • cmp #50

  • bcs Irclearcount;;接下来大于5ms ( 50*100us = 5ms) ;; Irclearcount

  • cmp #20

  • bcc Irclearcount;;小于2ms Irclearcount

  • cmp #35

  • bcc Irisrepeat;;小于3.5ms Irisrepeat

  • cmp #40

  • bcc Irclearcount;;小于4ms Irclearcount

  • lda #32

  • 注释:上面的时序描述,完全反映了头码及重复码的判定过程。


Iop ir

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——IR数据的抓取

  • cmp #11 // >>11,为1。Else 0

  • ror rIrReceiver

  • ror rIrReceiver+1

  • ror rIrReceiver+2

  • ror rIrReceiver+3

C

C

D7 D6 D5 D4 D3 D2 D1 D0

C

C


Iop ir1

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——IR数据校验和保存

  • lda rIrReceiver+1 ;数据原码

  • eor rIrReceiver ;数据反码

  • cmp #FFH ;异或结果与0FFH比较

  • bne Irdataerr ;不相等,跳转;数据错误

  • lda rIrReceiver+3

  • sta IOP_DATA6_H ;数据正确,保存IOP_DATA6_H

  • lda rIrReceiver+1

  • sta IOP_DATA6_L ;save to IOP_DATA6_L

  • 注:1、到此为止,IR的数据已经接收完成并保存到上层接口的寄存器中,上层可以自由调用了。

    2、在数据的接收中,采用顺次从高到低移位。所以,先进入的数据被存入了低位。和示波器中的正好相反。


Iop vfd 1

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——VFD数据的收发(1)

  • VFD数据的传输是在STB为低电平,CLK为上升沿时进行数据的传输。在程序中,我们就是模仿STB和CLK的时序,进行数据的接收和发送。具体的程序已经注释好了,在此不在讲述。


Iop vfd 2

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——VFD数据的收发(2)

  • VFD数据的接收用ror rVfddata ;和IR的接收一样。

  • VFD数据的发送用lda VFD_BUFFER_BASE,x

    sta rVfddata

  • VFD-BUFFER:$400-$41c共28个字节。其中有4B的控制字和24B的数据。在我们程序中只用了16B的数据。


Iop qcode

SUNPLUS

TECHNOLOGY FOR EASY LILE

IOP具体软件的实现——QCODE数据的接收

  • QCODE数据包括96bit,其中80bit的数据位和16bit的CRC校验位。我们程序中分两种接收,一种是接收96bit;一种是接收80bit。

  • 数据接收用rol rQcodedata,x

  • 接收96bit:

  • xxyy:

  • lda rQcodedata,x

  • sta QCODE_BUFFER,x

  • inx

  • cpx #12 ;;接收12bytes=96bits

  • bne xxyy

  • 接收80bit:

  • xxyy:

  • lda rQcodedata,x

  • sta QCODE_BUFFER,x

  • inx

  • cpx #10 ;;接收10bytes=80bits

  • bne xxyy


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

I2C总线简介

  • I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。

  • 在 I2C总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。

  • 标准I2C总线的设备都有一个七位地址,所有连接在I2C总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第九位答时钟脉冲时向SDA线送出低电平作为应答。

  • 启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读)。被寻址到的从机设备按传送方向位设置为对应工作方式。


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

I2C器件地址介绍

  • 由于I2C总线可挂接多个串行接口器件,在I2C总线中每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位数据(即一个I2C总线系统中理论上可挂接128个不同地址的器件),它和1位数据方向位构成一个器件寻址字节,最低位D0为方向位(读/写)。

  • 器件寻址字节中的最高4位(D7~D4)为器件型号地址,不同的I2C总线接口器件的型号地址是厂家给定的,如AT24C系列E2PROM的型号地址皆为1010,器件地址中的低3位为引脚地址A2A1A0,对应器件寻址字节中的D3、D2、D1位,在硬件设计时由连接的引脚电平给定。


At24c e 2 prom

SUNPLUS

TECHNOLOGY FOR EASY LILE

AT24C系列串行E2PROM

  • 对于E2PROM的片内地址,容量小于256字节的芯片(AT24C01/02),8位片内寻址(A0~A7)即可满足要求。然而对于容量大于256字节的芯片,则8位片内寻址范围不够,如AT24C16,相应的寻址位数应为11位(211=2048)。若以256字节为1页,则多于8位的寻址视为页面寻址。在AT24C系列中对页面寻址位采取占用器件引脚地址(A2、A1、A0)的办法,如AT24C16将A2、A1、A0作为页地址。凡在系统中引脚地址用作页地址后,该引脚在电路中不得使用,作悬空处理。AT24C系列串行E2PROM的器件地址寻址字节如表所示,表中P0P1P2表示页面寻址位。


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

I2C的时序和模拟程序

void I2cStart(void)

{

Set_SDA_1;

Set_SCL_1;

delay_time(1);

Set_SDA_0;

delay_time(1);

}

void I2cStop(void)

{

delay_time(1);

Set_SDA_0;

Set_SCL_1;

delay_time(1);

Set_SDA_1;

}


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

I2C完整的数据传输

读写控制位

启动I2C总线

结束I2C总线

7位器件地址

应答信号

应答信号

传送一个字节数据

应答信号

传送一个字节数据


Spca718 iop

SUNPLUS

TECHNOLOGY FOR EASY LILE

Q &A

衷心感谢胡工和潘工细心的讲解和指导!

感谢SVCD全体同仁!

感谢在坐的各位同仁!

谢谢大家!


  • Login