⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my63101.asm

📁 usb通讯,本代码主要是练习CY63101芯片的初始设置和通讯。
💻 ASM
字号:
;==start=========================
;
;本人无CYASM编译器,希望能得到您的帮助为盼。
;
;=以下为设定相关参数=======
include "63101.inc"
Data_Byte0: equ 38h
Data_Byte1: equ 39h
Data_Byte2: equ 3Ah
Data_Byte3: equ 3Bh
Data_Byte4: equ 3Ch
Data_Byte5: equ 3Dh
Data_Byte6: equ 3Eh
Data_Byte7: equ 3Fh
;
suspend_counter:  equ 35h
loop_temp:        equ 37h
start_send:       equ 32h
temp:             equ 25h
start_time:       equ 21h
testbit:          equ 22h
interrupt_mask:   equ 20h
endp0_data_toggle:equ 23h
loop_counter:     equ 24h
data_start:       equ 27h
data_count:       equ 28h
endpoint_stall:   equ 29h
;===========================
;以下为128MS與Cext中断,可根據需要再加以设定。
;================
    org  00h
jmp  Reset
    org  02h
jmp DoNothing_ISR
    org  04h
jmp One_mSec_ISR
    org  06h
jmp USB_EP0_ISR
    org  08h
jmp USB_EP1_ISR 
    org  0Ah
jmp Reset
    org  0CH
jmp GPIO_ISR
    org  0Eh
jmp DoNothing_ISR
     org 10h
;===========================
;中断子程序
;==========================
;未用到的中断
;==========================
DoNothing_ISR:
      push A
      mov A,[interrupt_mask]
      ipret Global_Interrupt
;==================================
;1ms 中断
;=============================
One_mSec_ISR:
    push A
    iowr Watchdog
    mov A,[loop_temp]
    cmp A,0h
    jz not_main
    dec [loop_temp]
not_main:
    iord USB_Status_Control
    and A,01h
    cmp A,0h
    jz Inc_counter
    iord USB_Status_Control
    and A,0FEh
    iowr USB_Status_Control
    mov A,0h
    mov [suspend_counter]
    jmp Suspend_end
Inc_counter:
    inc [suspend_counter]
    mov A,[suspend_counter]
    cmp A,03h
    jnz Suspend_end
    mov A,0h
    mov [suspend_counter],A
    iord Status_Control
    or A,08h
    iowr Status_Control
    nop
Suspend_end:
    iord USB_EP1_TX_Config
    cmp A,0
    jz Select
    mov A,[start_send]
    cmp A,01h
    jnz Select
    jmp send_value
send_value:
    mov A,[interrupt_mask]
    and A,efh
    mov [interrupt_mask],A
    iowr Global_Interrupt
    mov A,[Data_Byte0]
    mov [Endpoint1_Byte0],A
    iord SUB_EP1_TX_CONFIG
    and A,40h
    or A,91h
;==============================
    iowr USB_EP1TX_Config
Select:
    mov A,[interrupt_mask]
    or A,10h
    mov [interrupt_mask],A
    ipret Global_Interrupt
;====================
;GPIO 中断,在主程序中未使用。
;==================
GPIO_ISR:
    push A
    push X
    pop X
    mov [interrupt_mask],A
    ipret Global_Interrupt
;==================
;执行端点一的中断服务程序。
;==================
USB_EP1_ISR:
    push A
    iord USB_EP1_TX_Config
    xor A,40h
    or A,91h
    iowr USB_EP1_Config
    mov A,[interrupt_mask]
    ipret Global_Interrupt
;=============================
;电源打开重置的服务程序。
;==========================
Reset:
    mov A,Endpoint_0
    swap A,dsp
    mov A,0ffh
    iowr Port0_Data
    iowr Port1_Pullup
    iowr port1_Isink0
    iowr port1_Isink1
    iowr port1_Isink2
    iowr port1_Isink3
    mov A,0h
    iowr Port0_Datd
    iowr Port0_Interrupt
    iowr Port0_Pullup
    iowr Port0_Isink0
    iowr Port0_Isink1
    iowr Port0_Isink2
    iowr Port0_Isink3
    iowr Port0_Isink4
    iowr Port0_Isink5
    iowr Port0_Isink6
    iowr Port0_Isink7
    mov [Endpoint1_Byte0],A
    mov [Endpoint1_Byte1],A
    mov [Endpoint1_Byte2],A
    mov [endpoint_stall],A
    mov [remote_wakeup_status],A
    mov [configuration_status],A
    mov [start_send],A
    iowr Watchdog
    iord Status_Control
    and A,USBReset
    jnz Busreset
    iord Status_Control
    jz suspendReset
    mov A,TIMER_ONLY
    mov [interrupt_mask],A
    iowr Global_Interrupt
WatchdogHandler:
    jmp WatchdogHandler
suspendReset:
    mov A,09h
    iowr Status_Control
    nop
    jmp susspendReset
BusReset:
    mov A,RunBit
    iowr Status_Control
    mov A, ENUMERATE_MASK
    mov [interrupt_mask],A
    iowr Global_Inierrupt
wait:
    iord USB_EP1_TX_Config
    cmp A,0
    iowr Watchdog
    jz wait
    mov A,offh
    mov [loop_temp],A
    iord USB_EP1_TX_Config
;=======================================
;主程序的循环
;======================================== 
main:
    mov A,[loop_temp]
    cmp A,0ah
    jnc no_set
    mov A,01h
    mov [start_send],A
no_set:
    iowr Watchdog
nochange:
    jmp main
;============================
;端点0的中断服务程序。
;=========================
USB_EP0_ISR:
    push A
    iord USB_EP0_RX_Status
    and A,01
    jz check_for_out_packet
    mov A,[interrupt_mask]
    and A,0F7h
    mov [interrupt_mask],A
    iowrGlobal_Interrupt
    call StageOne
    mov A,[interrupt_mask]
    or A,08h
    mov [interrupt_mask],A
    jmp done_with_packet
    check_with_packet
check_for_packet:
   iord USB_EP0_RX_Status
   and A,02h
   jz done_with_packet
   mov A,[interrupt_mask]
   and A,0f7h
   mov [interrupt_mask],A
   iowr Global_Interrupt
   push X
   mov X,0
Get_Received_Data:
    mov A,0
    cmp A,[data_count]
    jz DoneWithReceiveData
    mov A,[X_eNDPOINT_0]
    mov [X+Data_Byte0],A
    dec [data_count]
    inc X
    jmp Get_Received_Data
DoneWithReceivedDa:
    pop x
    call Send0ByteDataPacket
done_with_packet:
    mov A,[interrupt_mask]
    or A,08h
    mov [interrupt_mask],A
ipret Global_Interrupt
;==================END============


  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -