carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1244回复:9

年关了救救小弟

楼主#
更多 发布于:2004-01-05 19:41
年关了救救小弟
做不出来不让回家过年啊!!!!
小弟在用CS5954AM做U盘开发固件时遇到些问题
下面是CYPRESS的一段固件源码:

.xlist
    include nandflsh.inc
.list              
cDevSel  equ 0xe0
;**********************************************************************
; Software Init: Default Setting to Rec command From Host
; Using Scan for Enhancement code
;**********************************************************************
   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    0xc006                   ;mov [0xc006],0 setup processor at 48MHz
#ifdef USE_12
   dw    0x40                     ;setup for 12MHz oscillator
#else
   dw    0                        ;setup for 48MHz oscillator
#endif

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    0xc03a
#ifdef USE_SLOW                   ;;make SRAM 8-bit or 16-bit
   dw    0x00b                    ;ext=16-bit,0-wait|rom=16,bit-0wait|ram=8-bit,3-wait
#else
   dw    0x009                    ;ext=16-bit,0-wait|rom=16,bit-0wait|ram=8-bit,1-wait
#endif

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    (83*2)                  
   dw    std_class

   dw    0xc3b6                   ;enhancement signature
   dw    6                        ;length of stuff
   db    0                        ;COPY opcode
   dw    (91*2)                   ;string descriptor loc;;
   dw    conf_desc
   dw    string_desc

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    (USB_DELTA_CONFIG_INT*2)  ;;
   dw    New_Delta

   dw    0xc3b6                   ;enhancement signature
   dw    ((IRAM0_E-IRAM0_S)+2)    ;length of IRAM0
   db    0                        ;memory copy
   dw    IRAM0                    ;??IRAM0,IRAM_S
   reloc IRAM0
IRAM0_S:
这是固件开头的一段,0Xc3b6是中断67的信号标记而0XE0是源地址(起始位置)我的问题在这儿
  dw    0xc3b6                   ;enhancement signature
   dw    ((IRAM0_E-IRAM0_S)+2)    ;length of IRAM0
   db    0                        ;memory copy
   dw    IRAM0                    ;??IRAM0,IRAM_S
   reloc IRAM0
按照头文件的描述如下
;**************************************************************************
; Unused RAM space for SL11R chip Rev 1.2 & CS5954AM
;  IRAM0: 0x01e-0x07e  0x60 free MEM: interrupt vector 15 to int 63
;  IRAM1: 0x0c2-0x0fe  0x38 free MEM: interrupt vector 97 to int 127
;  IRAM2: 0x2f2-0x33e  0x4C free MEM: RAM variables
; Remove UART:
;  IRAMU: 0x22a-0x268  0x3E free, must disable UART_INT and UART_IDLE task  
;**************************************************************************
这个IRAM0是个什么东东我看不明白,我猜是一个USB通道但是有问题它的地址空间0x01e-0x07e为什么不在0XE0后面
如果是中断向量组空间从中断15到63又大有问题,CS5954AM中断分类如下:
硬中断
InterruptNumber    VectorAddress       InterruptType  Note
0                  0x0000              Timer0         1
1                  0x0002              Timer1          2
2                  0x0004              GP IRQ0         2
3                  0x0006              GP IRQ1         2
4                  0x0008              UART Tx         1
5                  0x000A              UART Rx         1
6                  0x000C              Fast DMA Done   2
7                  0x000E              USB Reset
8                  0x0010              USB SOF          3
9                  0x0012              USB Endpoint0    1
No Error      
10                 0x0014              USB Endpoint0
Error             1
11                 0x0016              USB Endpoint1
No Error
12                 0x0018              USB Endpoint1 Error
13                 0x001A              USB Endpoint2
                                       No Error
14                 0x001C              USB Endpoint2 Error
15                 0x001E              USB Endpoint3
No Error
16                 0x0020              USB Endpoint3 Error
17                 0x0022              Mailbox TX Empty
(16-Bit Mode Only) 2
18                 0x0024               Mailbox RX Full
(16-Bit Mode Only) 2
19-63              0x0026- 0x003E       Reserved 2


请诸位大哥帮小弟看一下看一下这个IRAM0,IRAM1这几个东东是干吗的,小弟在编固件编不出来就过不了年了谢了!
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-06 09:32
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-07 18:22
那位好心帮我看看吧
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-08 10:52
help!
y5318
驱动中牛
驱动中牛
  • 注册日期2001-09-18
  • 最后登录2018-05-29
  • 粉丝1
  • 关注0
  • 积分14分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-01-08 13:09
Iram0,Iram1是为了存取数据的,
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-08 16:56
实在不行发邮件给cy的surrport人员,
具体内容到www.cypress.com的看
你会在一到两个工作日得到回复的
或者到下面create a case,效果同前
http://www.cypress.com/support/knowledge_base.cfm
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-10 21:49
不太象啊
好象是开PI出来内存空间但是与下面的源程序不附
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-10 21:59
谢谢了
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-12 21:36
我把程序贴的完整一些大家看一下
.xlist
    include nandflsh.inc
.list
cDevSel  equ 0xe0
;**********************************************************************
; Software Init: Default Setting to Rec command From Host
; Using Scan for Enhancement code
;**********************************************************************
   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    0xc006                   ;mov [0xc006],0 setup processor at 48MHz
#ifdef USE_12
   dw    0x40                     ;setup for 12MHz oscillator
#else
   dw    0                        ;setup for 48MHz oscillator
#endif

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    0xc03a
#ifdef USE_SLOW                   ;;make SRAM 8-bit or 16-bit
   dw    0x00b                    ;ext=16-bit,0-wait|rom=16,bit-0wait|ram=8-bit,3-wait
#else
   dw    0x009                    ;ext=16-bit,0-wait|rom=16,bit-0wait|ram=8-bit,1-wait
#endif

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    (83*2)                   ;;中断83,USB标准类(USB1.1 9章,USB框架结构)
   dw    std_class

   dw    0xc3b6                   ;enhancement signature
   dw    6                        ;length of stuff
   db    0                        ;COPY opcode
   dw    (91*2)                   ;string descriptor loc;;指针指向配置描述符
   dw    conf_desc
   dw    string_desc

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    (USB_DELTA_CONFIG_INT*2)  ;;中断95;配置改变时收到通知。
   dw    New_Delta

   dw    0xc3b6                   ;enhancement signature
   dw    ((IRAM0_E-IRAM0_S)+2)    ;length of IRAM0
   db    0                        ;memory copy
   dw    IRAM0                    ;??IRAM0,IRAM_S
   reloc IRAM0
IRAM0_S:
;**********************************************************************
; Arm Setup for Endpoint1/Endpoint
;**********************************************************************
ArmSetup:
   mov   [r10],64                  
ArmSetup0:
   mov   [pkg_cnt],(cMAXSIZE/128)   ;;pkg_cnt初值定为0,CMAXSIZE/128=8 CMAXSIZE在NANDFLSH.INC中定义为1024.
   int   ARM_INT                    ;;在NANDFLSH.INC中定义为 3 .GP IRQ1  (初始化GPIO端点 )??
   ret
;**********************************************************************
; Initialize and arm endpoint 1 to send USB Status packets
;**********************************************************************
_InitEP1:
   mov   [USB_EP1_ADDR],SCMD      ;setup to send command
   mov   [USB_EP1_CNT],0xd        ;Command Block size ;;oxd=13
ArmEP1:
   mov   [LastAddr1],[USB_EP1_ADDR]   ;LastAddr1=LastAddr1
   mov   [LastCnt1],[USB_EP1_CNT]    ;LastCnt1=0X286
   mov   [USB_EP1_CNTRL],cDMA1ENA   ;; cDMA1ENA(EP_DIR_IN|EP_ENB|EP_ARM) ;Bulk host read
   ret
;**********************************************************************
; Require r9=pointer to 32-bit length
;**********************************************************************
dUpdate64:
   mov   r0,cBUFFSIZE             ;input expected len, return r0=remainder ;cBUFFSIZE=64 SETUP包是64位的
   mov   r9,_xLenLSB              ;;_xLenLSB equ  (nBuff+2)  ; dw  0;;0X25e
dChkSize:
   sub   [r9++],r0                ;sub low word
   subb  [r9],0                   ;dec the high word
   rnc                            ;;??
   xor   [r9],[r9]                ;MSB = 0
   subi  r9,2
   add   r0,[r9]                  ;return r0 = remainder
   xor   [r9],[r9]                ;LSB = 0
   ret
;**********************************************************************
; UpdateBuff: Updates dual USB buffer (512 bytes * 2) and wraps if at end
;**********************************************************************
UpdateBuff:
   mov   r10,nBuff                ;Update USB Buffer DATA ptr ;nBuff=0X25C
   mov   r7,[r10]                 ;return current ptr in r8
   add   [r10],r0                 ;next block, r0=512
ChkWrap:
   cmp   [r10],(DATA0+cMAXSIZE)
   rl
   mov   [r10],DATA0              ;check buffer wrap arround
   ret
pkg_cnt:     dw 0
page_cnt:    dw 0
IRAM0_E:
   err<z (IRAM0Size-(IRAM0_E-IRAM0_S))  ; check if go over limited range

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    USB_RESET_VEC            ;; USB复位
   dw    USB_reset

   dw    0xc3b6                   ;enhancement signature
   dw    ((IRAM1_E-IRAM1_S)+2)    ;length of stuff
   db    0                        ;memory copy
   dw    IRAM1
   reloc IRAM1
IRAM1_S:
std_class:
   mov   [(90*2)],dev_desc        ; new device descriptor;;1, 中断90指针指向设备描述符,一般作为建立和修改设备描述符的开头。
#ifdef DEVELOPMENT                ;;充许多路并联
   cmp   [sse1],0x30              ; check sse1 for \'0\' (0x30)
   jne   @f
   mov   r0,[USB_ADDR_REG]        ; load the word with USB address;1, 取得设备地址
   and   r0,0x7                   ; pull off the USB address
   add   [sse1],r0                ; digit is ASCII \'0\'- add r0
@@:
#endif
   jmpl  USB_Stand                 ;;equ  0xf332        
;**********************************************************************
; new_71: Replace ISR for interrupt 71
;**********************************************************************
new_71:
   addi  r15,2                    ;adjust the stack
   int   70                       ;;70中断。空中断模拟多路线程
   int   71                       ;incase(打包) main execute return ;;71中断把任务提交前台。
IRAM1_E:
   err<z (IRAM1Size-(IRAM1_E-IRAM1_S))   ; check if go over limited range

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    USB_EP1_VEC              ;mov [USB_EP1_VEC],endp_1_int ;;中断11,ENDPOINT 无错
   dw    endp_1_int

   dw    0xc3b6                   ;enhancement signature
   dw    ((IRAM2_E-IRAM2_S)+2)    ;length of stuff
   db    0                        ;memory copy
   dw    IRAM2
   reloc IRAM2
IRAM2_S:
_gIdeState:    dw 0
;**********************************************************************
; RegSetup: Sets up registers to default states
;**********************************************************************
RegSetup:
   mov   rCNTRL,gHighOut          ;; gHighOut 在NANDFLSH.INC 中定义为 0xc02;; rCNTRL define r12
   mov   rCMD,_gCmd               ; Read/Write Command;; _gCMD=0X25a,        rCMD   define r13  
   mov   rSTATE,_gIdeState        ; Setup register 12;; _gIdeState=0,        rSTATE define r14
   ret
;**********************************************************************
; Endpoint 1 ISR: Send Command Status/Data to host
; use registers: r14-r12, r10, r7: should not use in other subroutines
; Host Read from Peripheral
;**********************************************************************
endp_1_int:
   push  [flags]
   int   SAVE_REGS                ;save all registers to stack
   test  [_gIdeState],eSndData    ;send data
   jz    SetDefault               ;no set Default Buffer
ep1_data:
   mov   r10,USB_EP1_ADDR
ep_common:
   call  dUpdate64                ;xLen -= 64
   and   r0,r0
   jnz   @f
   mov   [_gIdeState],eSndStatus  ;;如果打好包,开始保存所有寄存器存器                                    
   jmp   exit_isr
@@:
   mov   [r10+2],r0               ;update xfer length on USB_EPx_CNT
   call  ChkWrap                  ;check buffer wrap arround
   dec   [pkg_cnt]                ;kick off Read/Write in the MainTask
   jz    exit_isr
   int   ARM_INT
exit_isr:
   int   REST_REGS                ;restore all registers
pop_exit:
   pop   [flags]
   sti
   ret
IRAM2_E:
   err<z (IRAM2Size-(IRAM2_E-IRAM2_S))   ; check if go over limited range

   dw    0xc3b6                   ;enhancement signature
   dw    4                        ;length of stuff
   db    0                        ;COPY opcode
   dw    USB_EP2_VEC              ;mov [USB_EP2_VEC],endp_2_int
   dw    endp_2_int

   dw    0xc3b6         ;enhancement signature
   dw    ((IRAM3_E-IRAM3_S)+2)    ;length of IRAM3
   db    0  ;memory copy
   dw    IRAM3
   reloc IRAM3
IRAM3_S:
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-12 21:47
大侠们看一下
这里有一点矛盾
按照汇编程序
IRAM0_S:是标号应指向下面的代码,
ArmSetup:
   mov   [r10],64                  
ArmSetup0:
   mov   [pkg_cnt],(cMAXSIZE/128)
IRAM0_E:
指向
   err<z (IRAM0Size-(IRAM0_E-IRAM0_S))  ; check if go over limited range  
并在这一行检测长度
问题在于在。INC文件中
  IRAM0: 0x01e-0x07e  0x60 free MEM: interrupt vector 15 to int 63
IRAM0                   equ  0x1e              ; unused memory
IRAM0Size               equ  (0x80-IRAM0)
这个0X1E正好是中断15的地址而这个地址是BIOS分给硬件中断的不可变的。
我有些搞不清楚这个IRAM0,1,2,3,还有一个U是做什么的
大家HELP一下
游客

返回顶部