User Tag List

Показано с 1 по 10 из 32

Тема: Программатор 1801РР1 к УКНЦ.

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #12

    Регистрация
    10.04.2019
    Адрес
    г. Фокино, Брянская обл.
    Сообщений
    401
    Спасибо Благодарностей отдано 
    52
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    65 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    Ну, голубую пилюлю
    Не пойдет. Нет 16 толерантных к 5 вольтам пинов одного порта. Блекпил советую, GPIOA полностью 5в толерантен.
    Да и ловить на STMке связку SYNC - DIN/DOUT - RPLY нужен таки ассемблер, увы СИ не успеет.
    Вот кусочек кода который отрабатывает запись/чтение в порты ВП1-128 (177130,177132), прерывания вызываются диспетчером адресов собранном на 27с512 и 155ла3:

    Скрытый текст


    //----------------------------------------------
    // void EXTI4_IRQHandler(void)
    //----------------------------------------------
    .section .text.EXTI4_IRQHandler
    .align
    .global EXTI4_IRQHandler
    .type EXTI4_IRQHandler, %function
    EXTI4_IRQHandler:
    push {r0-r3,lr}
    ldr r0,=GPIO_BASE
    ldr r1,=MEM_BASE
    ldrh r2,[r1] //,#RSN_RDA] //load Status
    EXTI4_IRQHandler_start:
    READPORT_R0 r3,GPIOB
    and r3,#7
    eor r3,#7
    tbb [pc,r3]
    EXTI4_IRQHandler_table:
    .byte (EXTI4_IRQHandler_case_0 - EXTI4_IRQHandler_table)/2 //case 0 - exit
    .byte (EXTI4_IRQHandler_case_SYNC - EXTI4_IRQHandler_table)/2 //case 1 - only SYNC down
    .byte (EXTI4_IRQHandler_case_0 - EXTI4_IRQHandler_table)/2 //case 2 = case 0
    .byte (EXTI4_IRQHandler_case_DIN - EXTI4_IRQHandler_table)/2 //case 3 - SYNC|DIN down
    .byte (EXTI4_IRQHandler_case_0 - EXTI4_IRQHandler_table)/2 //case 4 = case 0
    .byte (EXTI4_IRQHandler_case_DOUT - EXTI4_IRQHandler_table)/2 //case 5 - SYNC|DOUT down
    .byte (EXTI4_IRQHandler_case_0 - EXTI4_IRQHandler_table)/2 //case 6 = case 0
    .byte (EXTI4_IRQHandler_case_0 - EXTI4_IRQHandler_table)/2 //case 7 = case 0

    .align
    EXTI4_IRQHandler_case_0:
    //reset exti port
    ldr r2,=(EXTI_PR1)
    ldr r3,=EXTI_LINE_4
    str r3,[r2]
    //release RPLY|VA87DIR
    SETGPIO_R0 r3,GPIOB,#(RPLY|VA87DIR)
    pop {r0-r3,lr}
    bx lr
    EXTI4_IRQHandler_case_SYNC:
    b EXTI4_IRQHandler_start
    //--------------get Status-----------------
    EXTI4_IRQHandler_case_DIN:
    RESETGPIO_R0 r3,GPIOB,#(VA87DIR)
    SETPORT_R0 r3,GPIOA,MODER,MODER_O
    SETODRPORT_R0 r2,GPIOA //Out status from r2
    RESETGPIO_R0 r3,GPIOB,#(RPLY)
    irq4_din_rsn_h_wait:
    READPORT_R0 r3,GPIOB
    tst r3,#(DIN)
    beq irq4_din_rsn_h_wait

    and r2,#0
    SETPORT_R0 r3,GPIOA,MODER,MODER_I
    //-----------end din-----------------
    //save operation
    strb r2,[r1,SET_OPA]
    //strh r2,[r1] //,#RSN_RDA] //RSN_RD=0
    //reset exti port
    ldr r2,=(EXTI_PR1)
    ldr r3,=EXTI_LINE_4
    str r3,[r2]
    //release RPLY|VA87DIR
    SETGPIO_R0 r3,GPIOB,#(RPLY|VA87DIR)
    pop {r0-r3,lr}
    bx lr
    //--------------set CMD-----------------
    EXTI4_IRQHandler_case_DOUT:
    RESETGPIO_R0 r3,GPIOB,#(RPLY)
    //SETPORT_R0 r3,GPIOA,MODER,MODER_I //may be delete?
    irq4_rsn_dout_h_wait:
    READPORT_R0 r3,GPIOA
    READPORT_R0 r2,GPIOB
    tst r2,#(DOUT)
    beq irq4_rsn_dout_h_wait

    strh r3,[r1,#RSN_WRA]
    tst r3,#0x100 //GOR?
    beq EXTI4_IRQHandler_case_DOUT_end
    ldrh r2,=0 //cmd
    strh r2,[r1,#RSN_RDA] //RSN_RD=0
    strh r2,[r1,#RDN_RDA] //RDN_RD=0
    //-----------end dout-----------------
    EXTI4_IRQHandler_case_DOUT_end:
    //reset exti port
    ldr r2,=(EXTI_PR1)
    ldr r3,=EXTI_LINE_4
    str r3,[r2]
    //release RPLY|VA87DIR
    SETGPIO_R0 r3,GPIOB,#(RPLY|VA87DIR)
    pop {r0-r3,lr}
    bx lr


    //----------------------------------------------
    // void EXTI9_5_IRQHandler(void)
    //----------------------------------------------
    .section .text.EXTI9_5_IRQHandler
    .align
    .global EXTI9_5_IRQHandler
    .type EXTI9_5_IRQHandler, %function
    EXTI9_5_IRQHandler:
    push {r0-r3,lr}
    ldr r0,=GPIO_BASE
    ldr r1,=MEM_BASE
    ldrh r2,[r1,#RDN_RDA] //load Data
    EXTI9_5_IRQHandler_start:
    READPORT_R0 r3,GPIOB
    and r3,#7
    eor r3,#7
    tbb [pc,r3]
    EXTI9_5_IRQHandler_table:
    .byte (EXTI9_5_IRQHandler_case_0 - EXTI9_5_IRQHandler_table)/2 //case 0 - exit
    .byte (EXTI9_5_IRQHandler_case_SYNC - EXTI9_5_IRQHandler_table)/2 //case 1 - only SYNC down
    .byte (EXTI9_5_IRQHandler_case_0 - EXTI9_5_IRQHandler_table)/2 //case 2 = case 0
    .byte (EXTI9_5_IRQHandler_case_DIN - EXTI9_5_IRQHandler_table)/2 //case 3 - SYNC|DIN down
    .byte (EXTI9_5_IRQHandler_case_0 - EXTI9_5_IRQHandler_table)/2 //case 4 = case 0
    .byte (EXTI9_5_IRQHandler_case_DOUT - EXTI9_5_IRQHandler_table)/2 //case 5 - SYNC|DOUT down
    .byte (EXTI9_5_IRQHandler_case_0 - EXTI9_5_IRQHandler_table)/2 //case 6 = case 0
    .byte (EXTI9_5_IRQHandler_case_0 - EXTI9_5_IRQHandler_table)/2 //case 7 = case 0

    .align
    EXTI9_5_IRQHandler_case_0:
    //reset exti port
    ldr r2,=(EXTI_PR1)
    ldr r3,=EXTI_LINE_5
    str r3,[r2]
    pop {r0-r3,lr}
    bx lr
    EXTI9_5_IRQHandler_case_SYNC:
    b EXTI9_5_IRQHandler_start
    EXTI9_5_IRQHandler_case_DIN:
    RESETGPIO_R0 r3,GPIOB,#(VA87DIR)
    SETPORT_R0 r3,GPIOA,MODER,MODER_O
    SETODRPORT_R0 r2, GPIOA
    RESETGPIO_R0 r3,GPIOB,#(RPLY)
    irq5_din_rdn_h_wait:
    READPORT_R0 r3,GPIOB
    tst r3,#(DIN)
    beq irq5_din_rdn_h_wait

    SETPORT_R0 r3,GPIOA,MODER,MODER_I
    SETGPIO_R0 r3,GPIOB,#(RPLY|VA87DIR)
    //-----------end din-----------------
    ldrh r3,[r1]//,#RSN_RDA] //eq 0
    bic r3,#0x80 // 7 bit (TR)
    strh r3,[r1]//,#RSN_RDA]
    //reset exti port
    ldr r2,=(EXTI_PR1)
    ldr r3,=EXTI_LINE_5
    str r3,[r2]
    pop {r0-r3,lr}
    bx lr
    EXTI9_5_IRQHandler_case_DOUT:
    RESETGPIO_R0 r3,GPIOB,#(RPLY)
    //SETPORT_R0 r3,GPIOA,MODER,MODER_I
    irq5_rdn_dout_h_wait:
    READPORT_R0 r3,GPIOA
    READPORT_R0 r2,GPIOB
    tst r2,#(DOUT)
    beq irq5_rdn_dout_h_wait

    strh r3,[r1,#RDN_WRA]
    SETGPIO_R0 r3,GPIOB,#(RPLY)
    //-----------end dout-----------------
    ldrh r3,[r1]//,#RSN_RDA] //eq 0
    bic r3,#0x80 // 7 bit (TR)
    strh r3,[r1]//,#RSN_RDA]
    //reset exti port
    ldr r2,=(EXTI_PR1)
    ldr r3,=EXTI_LINE_5
    str r3,[r2]
    pop {r0-r3,lr}
    bx lr
    //-----------end EXTI9_5_IRQHandler-------------
    [свернуть]
    Последний раз редактировалось ZPilot; 14.06.2020 в 16:11.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. РЕ-мулятор - внутрисхемный эмулятор 1801РЕ2/1801РР1
    от Vslav в разделе Разработка электроники
    Ответов: 152
    Последнее: 20.10.2025, 19:07
  2. Ответов: 247
    Последнее: 17.11.2024, 07:55
  3. Про 1801РР1
    от Andrey_Korabelev в разделе Разработка электроники
    Ответов: 7
    Последнее: 26.03.2021, 15:27
  4. Продам МС5310 блок дисководов к УКНЦ+КМД УКНЦ
    от Mad Killer/PG в разделе Барахолка (архив)
    Ответов: 7
    Последнее: 19.03.2012, 11:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •