;---------------------------------------------------------------- ; procedure USB2JTAG ; ; Выдает по JTAG: управляющий бит или байт данных, ; принимает по JTAG: ничего, бит или байт ; ; Input registers: ; None ; Output registers: ; None ; Uses registers: ; A, R0 - R3 ;---------------------------------------------------------------- USB2JTAG: ; Проверяем ранее установленный признак режима пакетной выдачи байтов по JTAG JB IsPacketMode, U2J_PM ; 3 SYSCLK ; Проверяем, является ли текущий байт заголовком пакета JNB ACC.7, U2J_CM ; 3 SYSCLK ; Подключаем P1.0-P1.3 к SPI0 CLR TCK ; 2 SYSCLK SETB TDO ; 2 SYSCLK MOV XBR0, #SPI_Enabled ; 2 SYSCLK ; Формируем бит Send_TDO_Bits MOV C, ACC.6 ; 2 SYSCLK MOV Send_TDO_Bits, C ; 2 SYSCLK ANL A, #3Fh ; 2 SYSCLK MOV JTAG_Packet_Length, A ; 2 SYSCLK SETB IsPacketMode ; 2 SYSCLK AJMP EP2_R_FIFO_EndCycle ; 3 SYSCLK U2J_CM: ; Режим выдачи управляющих сигналов JTAG ; выдача TDI MOV C, ACC.4 ; 2 SYSCLK MOV TDI, C ; 2 SYSCLK ; выдача TMS MOV C, ACC.1 ; 2 SYSCLK MOV TMS, C ; 2 SYSCLK ; выдача TCK MOV C, ACC.0 ; 2 SYSCLK MOV TCK, C ; 2 SYSCLK ; Признак необходимости выдачи хосту байта, содержащего бит TDO JNB ACC.6, U2J_Exit ; 3 SYSCLK CLR A ; 1 SYSCLK MOV C, TDO ; 2 SYSCLK MOV ACC.0, C ; 2 SYSCLK MOVX @R0, A ; 2 SYSCLK INC R0 ; 1 SYSCLK AJMP EP2_R_FIFO_EndCycle ; 3 SYSCLK Max 29 SYSCLK (0,8 MБит/сек) U2J_PM: ; Режим выдачи пакета данных по JTAG MOV EMI0CN, #Select_CBO_Arr ; 3 SYSCLK ;MOV TestDat, A MOV R1, A ; 1 SYSCLK MOVX A, @R1 ; 3 SYSCLK перекодировка MSB в LSB MOV SPI0DAT, A ; 2 SYSCLK + 32 SYSCLK для паралельных операций MOV EMI0CN, #Select_USB_Array ; 3 SYSCLK ; Признак необходимости выдачи хосту байта, содержащего биты TDO JNB Send_TDO_Bits, U2J_CPL ; 3 SYSCLK Some_Nop_Instr 25 ; 25 SYSCLK MOV EMI0CN, #Select_CBO_Arr ; 3 SYSCLK MOV R1, SPI0DAT ; 2 SYSCLK MOVX A, @R1 ; 3 SYSCLK перекодировка MSB в LSB MOV EMI0CN, #Select_USB_Array ; 3 SYSCLK ;MOV A, TestDat MOVX @R0, A ; 2 SYSCLK INC R0 ; 1 SYSCLK U2J_CPL: ; Проверяем, есть ли еще байты в пакете DJNZ JTAG_Packet_Length, EP2_R_FIFO_EndCycle ; 3 SYSCLK ; Выход из режима выдачи пакета Some_Nop_Instr 20 ; 20 SYSCLK CLR IsPacketMode ; 2 SYSCLK ; Отключаем P1.0-P1.3 от SPI0 MOV XBR0, #SPI_Disabled ; 2 SYSCLK U2J_Exit: AJMP EP2_R_FIFO_EndCycle ; 3 SYSCLK