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

📄 bum.asm

📁 蓝牙设备中HCI语言传输数据
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;====================;Serial Port 0 Define;====================SP0_CTS BIT P1.6SP0_RTS BIT P1.7;====================;Serial Port 1 Define;====================SP1_CTS BIT p1.5SP1_RTS BIT p1.4STATUS EQU 0C5HWDCON EQU 0D8HSCON1 EQU 0C0HRI_1  BIT SCON1.0TI_1  BIT SCON1.1SBUF1 EQU 0C1HES1   BIT ie.6PS1   BIT ip.6;==============;Timer 2 Define;==============TA    EQU 0C7H;ET2    BIT 0ADH;T2CON  EQU 0C8HTR2    BIT T2CON.2T2MOD  EQU 0C9H;RCAP2L EQU 0CAH;RCAP2H EQU 0CBH;TL2    EQU 0CCH;TH2    EQU 0CDH;=========================;Power Management Register;=========================PMR EQU 0C4H;-------------------;Data Pointer Select;-------------------DPS     EQU 86H;=================================;Serial Port Receive Buffer Define;---------------------------------;BlueCore 01 Receive Buffer;=================================SP0_WL EQU 0000HSP0_WH EQU 0001HSP0_RL EQU 0002HSP0_RH EQU 0003HSP0_LL EQU 04H  ;0004HSP0_LH EQU 00HSP0_BL EQU 00H  ;0200HSP0_BH EQU 02H;=========================================;Bluetooth Universal Module Receive Buffer;=========================================SP1_WL EQU 0200HSP1_WH EQU 0201HSP1_RL EQU 0202HSP1_RH EQU 0203HSP1_LL EQU 04H  ;0204HSP1_LH EQU 02HSP1_BL EQU 00H  ;0400HSP1_BH EQU 04H;========; ******;========ORG 0000H    ljmp BUM_MainORG 0003H      ;Extermal Interrupt 0    retiORG 000BH      ;Timer 0 Overflow    retiORG 0013H      ;Extermal Interrupt 1    retiORG 001BH      ;Timer 1 Overflow    retiORG 0023H      ;Serial Port    lcall BC01_INT    retiORG 002BH      ;Timer 2 Interrupt    retiORG 003BH      ;Serial Port 1    lcall BUM_INT    retiORG 0043H      ;Extermal Interrupt 2    retiORG 004BH      ;Extermal Interrupt 3    retiORG 0053H      ;Extermal Interrupt 4    retiORG 005BH      ;Extermal Interrupt 5    retiORG 0063H      ;Watchdog Timer    reti;========ORG 0070HBUM_Main:    mov ie,#00h    mov ip,#00h    mov psw,#00h       ;PSW置0    mov DPS,#00h    mov TA,#0aah    mov TA,#55h    mov tcon,#00h      ;复位定时器控制寄存器    mov T2CON,#00h    mov sp,#37h        ;设置堆栈指针    setb ea            ;允许总中断    xrl PMR,#01h    lcall ClearMemory    lcall BC01_SET_BUF    lcall OpenBC01    lcall BUM_SET_BUF    lcall OpenBUM    ;mov a,#0aah    ;lcall BUM_PutByte    ;mov a,#0aah    ;lcall BC01_PutByte        ;lcall BUM_Reset    ;lcall Delay5ms    ;lcall BC01_Dispose    ;lcall BUM_Init_As_Slave    ;lcall Delay5ms    ;lcall BC01_Dispose    ;lcall BUM_Init_As_Master    ;lcall Delay5ms    ;lcall BUM_Read_ADDR    ;lcall Delay5ms    ;mov r0,#0eah ;ADDR    ;mov r1,#42h    ;mov r2,#00h    ;mov r3,#5bh    ;mov r4,#02h    ;mov r5,#00h    ;lcall BUM_Create_DataConnection    ;lcall Delay5ms    ;mov r0,#22h ;DC_Handle    ;mov r1,#11h    ;lcall BUM_Disconnect_DataConnection    ;lcall Delay5ms    ;-------------------------------------------------------------------------------    ;处理HCI事件和数据分组    ;-------------------------------------------------------------------------------here:    lcall BC01_Dispose    lcall BUM_Dispose    sjmp here;---------------------------------------------------------------------------------;BlueCore01功能处理模块;---------------------------------------------------------------------------------;-----------------------;BlueCore01的HCI分组处理;-----------------------BC01_Dispose:      mov r0,#00h      lcall BC01_GetByte      cjne r6,#0FFh,BC01_HCI_Event_Dispose  ;读数据成功,则跳转到处理      ret                   ;缓冲区为空则返回BC01_HCI_Event_Dispose:      cjne r7,#04h,BC01_HCI_ACL_Dispose    ;判断是否是事件指示器,不是则从头开始      lcall Delay5ms      lcall Delay5ms      mov r0,#0ffh      lcall BC01_GetByte        ;是事件指示器,取出下一个字节判断事件类型      cjne r6,#00h,HCI_Event_Lost      push acc      mov a,r7      mov r0,a      pop acc      lcall HCI_Event_Type      retBC01_HCI_ACL_Dispose:      cjne r7,#02,BC01_HCI_Other      lcall HCI_ACL_Data_Receive      retBC01_HCI_Other:      ;错误的分组类型      ;延时5ms,清除中断接收缓冲区      lcall Delay5ms      lcall BC01_SET_BUF      ;通知主机      mov r0,#1dh       ;Status = 1DH(未特别指明的错误)      mov r1,#00h       ;OpCode = 00h      lcall BUM_Status_Event      retHCI_Event_Lost:      ;事件分组丢失      ;延时5ms,清除中断接收缓冲区      lcall Delay5ms      lcall BC01_SET_BUF      ;通知主机      mov r0,#0ffh        ;Hardware_Code = R0      lcall BUM_Hardware_Error_Event      ret;-----------------;判断HCI事件类型;入口参数:;  Event_Type = R0;-----------------HCI_Event_Type:         push acc         mov a,r0         mov r1,a               ;事件分组类型->R1         mov r0,#0ffh         lcall BC01_GetByte     ;取出事件分组参数长度         cjne r6,#00h,HCI_Event_Length_Lost         mov a,r7         mov r0,a               ;事件分组参数长度->R0         pop acc         cjne r1,#0eh,Next1         lcall HCI_Command_Complete_Event       ;调用命令完成事件         ret    Next1:         cjne r1,#0fh,Next2         lcall HCI_Command_Status_Event          ;调用命令状态事件         ret    Next2:         cjne r1,#02h,Next3         lcall HCI_Inquiry_Result_Event         ;调用查询结果事件         ret    Next3:         cjne r1,#01h,Next4         lcall HCI_Inquiry_Complete_Event       ;调用查询完成事件         ret    Next4:         cjne r1,#03h,Next5         lcall HCI_Connection_Complete_Event    ;调用链接完成事件         ret    Next5:         cjne r1,#1bh,Next6         lcall HCI_Max_Slots_Change_Event       ;调用最大时隙改变事件         ret    Next6:         cjne r1,#10h,Next7         lcall HCI_Hardware_Error_Event         ;调用硬件错误事件         ret    Next7:         cjne r1,#05h,CaseElse         lcall HCI_Disconnect_Complete_Event    ;调用断开链接完成事件         ret    CaseElse:         lcall Throw_Away_HCI_Event_Parameter    ;其他HCI事件分组,读出缓冲区内容         retHCI_Event_Length_Lost:    lcall Delay5ms    lcall BC01_Set_BUF    mov r0,#0ffh        ;Hardware_Code = R0    lcall BUM_Hardware_Error_Event    ret;--------------------------;读出中断缓冲区中的内容;入口参数:;  Read_Length = R0;返回参数:;  Status = R7 (==00H:成功);              (!=00H:失败);--------------------------Throw_Away_HCI_Event_Parameter:    push acc    push psw    push b    mov a,r1    push acc    mov a,r0             ;循环次数 -> A    mov r1,#80h            ;存放参数的首地址 -> R1TAHCIEP_Continue:    jz TAHCIEP_SUCCESS   ;取完数,返回成功    dec a                 ;循环次数减一    mov r0,#0ffh    lcall BC01_GetByte    ;取出一个字节    cjne r6,#00h,TAHCIEP_FAILE    mov b,r7    mov @r1,b            ;保存读出的字节    inc r1    sjmp TAHCIEP_ContinueTAHCIEP_SUCCESS:    mov r7,#00h    pop acc    mov r1,a    pop b    pop psw    pop acc    retTAHCIEP_FAILE:    mov r7,#0ffh    pop acc    mov r1,a    pop b    pop psw    pop acc    ret;-------------;查询完成事件;EventCode=01H;入口参数:;  Length = r0;-------------HCI_Inquiry_Complete_Event:    mov a,r0            ;参数长度->A    mov r0,#0ffh    lcall BC01_GetByte  ;Status -> R7    cjne r6,#00h,HCIICE_Lost    dec a    mov r0,a            ;Length->R0    mov a,r7            ;Status->A    lcall Throw_Away_HCI_Event_Parameter    cjne r7,#00,HCIICE_Lost    jnz HCIICE_FAIL    mov r0,#80h    mov a,#00h    mov @r0,a           ;Status = 00H (成功)    mov r0,#03h         ;Opcode = 03H (BUM_Init_As_Master)    mov r1,#01h         ;Length    lcall BUM_Complete_Event    retHCIICE_FAIL:    mov r0,#80h    mov a,#1dh    mov @r0,a           ;Status = 1DH (失败)    mov r0,#03h         ;Opcode = 03H (BUM_Init_As_Master)    mov r1,#01h         ;Lenght    lcall BUM_Complete_Event    retHCIICE_Lost:    mov r0,#0ffh        ;Hardware_Code = R0    lcall BUM_Hardware_Error_Event    ret;-------------;查询结果事件;EventCode=02H;入口参数:;  Length = r0;-------------HCI_Inquiry_Result_Event:    mov a,r0            ;参数长度 -> A    mov r0,#0ffh    lcall BC01_GetByte  ;读Num    cjne r6,#00h,HCIIRE_Lost    ;读出Num成功    mov a,r7            ;Num -> ASend_BUM_Init_As_Master_Result_Event:    jz HCIIRE_SUCCESS    dec a               ;Num = Num -1    push acc            ;A -> STACK    mov r0,#0eh         ;Length->R0(14字节)    lcall Throw_Away_HCI_Event_Parameter    cjne r7,#00,HCIIRE_Lost    mov r0,#01h         ;Num = 01H    lcall BUM_Init_As_Master_Result_Event    pop acc            ;STACK -> A    sjmp Send_BUM_Init_As_Master_Result_EventHCIIRE_SUCCESS:    retHCIIRE_FAIL:    mov r0,#80h    mov a,#1dh    mov @r0,a           ;Status = 1dH    mov r0,#03h         ;Opcode = 03H (BUM_Init_As_Master)    mov r1,#01h         ;Length    lcall BUM_Complete_Event    retHCIIRE_Lost:    mov r0,#0ffh        ;Hardware_Code = R0    lcall BUM_Hardware_Error_Event    ret;-------------;连接完成事件;EventCode=03H;入口参数:;  Length = r0;-------------HCI_Connection_Complete_Event:    lcall Throw_Away_HCI_Event_Parameter    cjne r7,#00,HCICCE_Lost             ;分组丢失    ;处理连接完成事件    mov r0,#80h    mov a,@r0           ;Status -> A    cjne a,#00h,HCICCE_FAIL     ;连接失败?    ;连接成功    mov r0,#89h          ;Link_Type -> A    mov a,@r0    cjne a,#00h,Create_ACL_SUCCESSCreate_SCO_SUCCESS:    ;SCO连接建立成功    retCreate_ACL_SUCCESS:    ;ACL连接建立成功    mov r0,#81h         ;Connection_Handle = (R2,R1)    mov a,@r0    mov r1,a    push acc            ;Push R1    inc r0    mov a,@r0    mov r2,a    push acc            ;Push R2    mov r0,#83h         ;ADDR = 80h -> 85h    mov a,@r0    mov r0,#80h    mov @r0,a    mov r0,#84h         ;1    mov a,@r0    mov r0,#81h    mov @r0,a    mov r0,#85h         ;2    mov a,@r0    mov r0,#82h    mov @r0,a    mov r0,#86h         ;3    mov a,@r0    mov r0,#83h    mov @r0,a    mov r0,#87h         ;4    mov a,@r0    mov r0,#84h    mov @r0,a    mov r0,#88h         ;5    mov a,@r0    mov r0,#85h    mov @r0,a    mov r0,#00h         ;Status = 00H(SUCCESS)    lcall BUM_DataConnection_Complete_Event    pop acc             ;Connection_Handle = (R1,R0)    mov r1,a    pop acc    mov r0,a    mov r2,#08h         ;Link_Policy_Setting = (R3,R2)[0008H][Park]    mov r3,#00h    lcall HCI_Write_Link_Policy_Settings    retHCICCE_FAIL:    mov r0,#89h          ;Link_Type -> A    mov a,@r0    cjne a,#00h,Create_ACL_FAILCreate_SCO_FAIL:    ;SCO连接建立失败    retCreate_ACL_FAIL:    mov r0,#80h    mov a,@r0    mov r0,a            ;Status = A(FAIL)    mov r1,#00h         ;Connection_Handle = (R2,R1)    mov r2,#00h    lcall BUM_DataConnection_Complete_Event    retHCICCE_Lost:    mov r0,#0ffh        ;Hardware_Code = R0    lcall BUM_Hardware_Error_Event    ret;-------------;连接请求事件;EventCode=04H;入口参数:;  Length = r0;-------------HCI_Connection_Request_Event:    lcall Throw_Away_HCI_Event_Parameter    ret;----------------;断开连接完成事件;EventCode=05H;入口参数:;  Length = r0;----------------HCI_DisConnect_Complete_Event:    lcall Throw_Away_HCI_Event_Parameter    cjne r7,#00,HCIDCE_Lost    mov r0,#81h    mov a,@r0    mov r1,a            ;DC_Handle = (R2,R1)    inc r0    mov a,@r0    mov r2,a            ;R2    inc r0    mov a,@r0    mov r3,a            ;Reason =R3    mov r0,#80h    mov a,@r0    mov r0,a            ;Status = R0    lcall BUM_Disconnect_Complete_Event    retHCIDCE_Lost:    mov r0,#0ffh    lcall BUM_Hardware_Error_Event    ret;-------------;认证完成事件;EventCode=06H;入口参数:;  Length = r0;-------------HCI_Authentication_Complete_Event:    lcall Throw_Away_HCI_Event_Parameter    ret;--------------------;远程命名请求完成事件;EventCode=07H;入口参数:;  Length = r0;--------------------HCI_Remote_Name_Request_Complete_Event:    lcall Throw_Away_HCI_Event_Parameter    ret

⌨️ 快捷键说明

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