Jump to content

    

iva33

Участник
  • Content Count

    8
  • Joined

  • Last visited

Community Reputation

0 Обычный

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Да вы правы получаю PKTSTS_SETUP_COMP, потом нулевые PKTSTS_OUT_RECEIVED, PKTSTS_OUT_CMPL и всё начинается заново.
  2. Всем доброго ещё раз, Кто подскажет если ответ на device_deskriptor (до адреса) будет ошибочным, может ли это быть причинаи отсутствия set_address после планиривона ресета? после рисета палучаю нулевой паккет setup_stage_down вместа 8 битного setup пакета.
  3. xx proc push {LR} pop {LR} BX LR endp всегда гарантирует хороший исход. Все нормально у меня щас код на 80к и проблем нет с использыванием регистеров.
  4. endpoint0_rx не надо (пока) но иногда пишу автоматом при открытии функции. пишу на проге КЕЙЛ тока АССЕМБЛИ. там есть C и ТП но люблю всё контролиривать и не люблю искать функции и внекат что там на крутили (работаю напрямую с даташеет).
  5. Регистр ЛИНКА предназначен для возвращения к исходной программе при пришке БЛ или при interupt (пре interupt туда сохроняетса спецальный код ). PC используется восновном компилире а вручную тока втаблицах, его не стоет особо трогать чтоб не застрять между кодам .
  6. с кодам всё хорошо и он не плохо работает (хотя многа надо доделать) . ошибка нашлась неправильно обеснили в даташеет, не смотря что вобьеснениях написана что через адрес 0х5000 1000- 1ffc можна четать фифо, но не стерает флаг. нужна четать через регистр OTG_GRXSTSP (0x5000 0020), хотя абетом не где асоба не написано а указан адрес 0х5000 1000 , тока в описаниях регистра написано што он для pop.
  7. Всем спасибо за старания. попробую объяснить что push и pop LR нужен каждый раз перед использыванием Branch LR иначе его не восстановить и не вазможна будет вернуться на исходную программу. весь код на асембли поэтому кручу регистерами как хочу r0-r12, регистры ISR r13 регистер ЛИНКА(LR) r14 и тд....
  8. Доброй всем, кто подскажет по какой то причине после загорания флажка RXFLVL при преёме setup паккета. после чтения флаг не тухнет. может я нетак четайо с fifo? в документах написано что должен сам тухнуть. code: ;define OTG_FS_H equ 0x5000 OTG_FS_L equ 0x0000 RX_FIFO_STR equ 0x1000 __usb_int proc push {LR} movw r9,#OTG_FS_L movt r9,#OTG_FS_H ldr r0,[r9,#OTG_GINTSTS_B] tst r0,#USBRST beq jmp_usb_int_reset_skip bl _device_init b jmp_usb_int_end jmp_usb_int_reset_skip tst r0,#ENUMDNE beq jmp_usb_int_enmflag_skip bl _device_enmflag b jmp_usb_int_end jmp_usb_int_enmflag_skip tst r0,#RXFLVL beq jmp_usb_int_rx_skip ldr r0,[r9,#OTG_GRXSTSR_B] ; and r1,r0,#EPNUM_MASK cmp r1,#ENPOINT0 bne jmp_usb_int_rx_endpoint1 bl _endpoint0_rx b jmp_usb_int_end jmp_usb_int_rx_endpoint1 b jmp_usb_int_end jmp_usb_int_rx_skip tst r0,#IEPINT jmp_usb_int_end pop {LR} BX LR endp _endpoint0_rx proc push {LR} ;acording to datasheet add r8,r9,#(RX_FIFO_STR) ;point to rxfifo start and r1,r0,#PKTSTS_MASK cmp r1,#PKTSTS_SETUP_REC bne jmp_endpoint0_rx_setup_rec ;disable ldr r1,[r9,#OTG_GINTMSK_B] bic r1,#(RXFLVL) str r1,[r9,#OTG_GINTMSK_B] mov r1,#BCNT_MASK ands r1,r0 ;adviced to test BYT_COUNT before poping fifo to avoid undefined behavior!!! beq jmp_endpoint0_rx_end ;first 4byt are status data ldr r0,[r8] mov r1,#BCNT_MASK and r1,r0 lsr r1,#4 ;byte received and r2,r0,#FRMNUM_MASK lsr r2,#21 ldr r3,[r8] ;only 4byt read alowed ldr r4,[r8] ;ldr r5,[r8],#4 mov32 r0,#(PKTCNT_CNT_OUT_MASK|STUPCNT_3PACK|0x40) ;pack size max 64 str r0,[r9,#OTG_DOEPTSIZ0_B] mov r0,#(CNAK) str r0,[r9,#OTG_DOEPCTL0_B] tst r3,#GET_BIT beq jmp_endpoint0_rx_setup_set and r1,r3,#GET_2BYT_MASK cmp r1,#GET_DESKRIPTOR bne jmp_endpoint0_rx_setup_get_next and r1,r3,#GET_4BYT_MASK cmp r1,#DEVICE_DESCRIPTOR bne jmp_endpoint0_rx_setup_get_next_descriptor ; bl _send_device_descriptor b jmp_endpoint0_rx_setup_get_end jmp_endpoint0_rx_setup_get_next_descriptor b jmp_endpoint0_rx_end ;---------- setup get ---------------------------------------- jmp_endpoint0_rx_setup_get_next jmp_endpoint0_rx_setup_get_end ldr r0,[r9,#OTG_GINTMSK_B] orr r0,#(RXFLVL) str r0,[r9,#OTG_GINTMSK_B] b jmp_endpoint0_rx_end ;*****SETUP set cmd *************************** jmp_endpoint0_rx_setup_set ldr r0,[r9,#OTG_GINTMSK_B] mov r0,#(RXFLVL) str r0,[r9,#OTG_GINTMSK_B] b jmp_endpoint0_rx_end jmp_endpoint0_rx_setup_rec cmp r1,#PKTSTS_SETUP_CMPL bne jmp_endpoint0_rx_out_cmpl mov32 r0,#(PKTCNT_CNT_OUT_MASK|STUPCNT_3PACK|0x40) ;pack size max 64 str r0,[r9,#OTG_DOEPTSIZ0_B] mov r0,#(CNAK) str r0,[r9,#OTG_DOEPCTL0_B] ;bl _send_device_descriptor b jmp_endpoint0_rx_end jmp_endpoint0_rx_out_cmpl cmp r1,#PKTSTS_OUT_CMPL bne jmp_endpoint0_rx_next ldr r0,[r8] b jmp_endpoint0_rx_end jmp_endpoint0_rx_next ldr r0,[r9,#OTG_GINTMSK_B] ;bic r0,#(RXFLVL) ;str r0,[r9,#OTG_GINTMSK_B] ;ldr r0,[r8] ;mov r0,#0 ;str r0,[r8] jmp_endpoint0_rx_end pop {LR} BX LR endp