User Tag List

Показано с 81 по 90 из 538

Тема: Планирую сделать FDD эмулятор на Atmega8

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

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

    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    594
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от s_kosorev Посмотреть сообщение
    так и должно, на запись идет манчестероподобный сигнал, который меняет полярность магнитного поля головки дисковода, а при чтении, магнитная головка вырабатывает импульс в момент смены полярности на диске

    хотя про запись точно не помню, в дисководе триггер стоит который по сигналу меняет полярность или от контроллера дисковода идет сигнал в управляющий полярностью, но это пока не важно

    тут поидее в ISR будет регистры портить, для расчета адреса

    вот отличнейшая статья чтение/запись на дисководы
    Поправил регистры, пришлось дизассемблировать, чтобы понять что там и как
    Вот код ISR в таком виде, как выше.
    L0053:
    ; 4 (ICALL)+2 (RJMP) + 1 = 7 циклов перед входом в прерывание
    ; вход в прерывание (7-8 циклов) ---------------------------------
    in r14,SREG
    mov r9,r24
    mov r10,r25
    mov r11,r30
    mov r12,r31
    cpse r19,r1
    rjmp L006F
    ;-----------------------------------------------------------------------
    ;
    ; // отправка первого байта (26 циклов) ---------------------------
    mov r20,r18
    lsr r20
    lsr r20
    lsr r20
    mov r30,r20
    ldi r31,0x00
    subi r30,0xE0
    sbci r31,0xFE
    ld r30,Z
    mov r20,r30
    mov r24,r30
    com r24
    sts D00C6,r24
    mov r20,r18
    andi r20,0x0F
    ldi r31,0x00
    subi r30,0x00
    sbci r31,0xFF
    ld r19,Z
    rjmp L0080
    ; ----------------------------------------------------------------------
    L006F:
    ; // отправка второго байта (20 циклов макс) ---------------------
    mov r30,r13
    ldi r31,0x00
    subi r30,0x00
    sbci r31,0xFE
    ld r24,Z
    mov r18,r24

    sbrc r24,7
    rjmp L0087

    sbrc r19,1
    rjmp L0087

    rjmp L0089
    ; ----------------------------------------------------------------------
    L007A:
    mov r24,r19
    com r24
    sts D00C6,r24
    clr r19
    inc r13
    ; ----------------------------------------------------------------------
    L0080:
    ; выход из прерывания (9 циклов)
    mov r31,r12
    mov r30,r11
    mov r25,r10
    mov r24,r9
    out SREG,r14
    reti
    ; ----------------------------------------------------------------------
    L0087:
    andi r19,0xFE
    rjmp L007A
    ; ----------------------------------------------------------------------
    L0089:
    ori r19,0x01
    rjmp L007A
    Итого имеем вроде как 50 циклов в худшем случае. 50*62.5 = 3.1мкс, байт у нас отправляется за 16мкс (байт данных за 32мкс), остается ~13мкс (~26мкс на байт) на основной код. Итого, нагрузка ISR составляет не более 9%
    Правда надо еще учитывать, что ардуина использует свой жуткий таймерный код, хотя там всего-то идет увеличение переменной типа long на единицу каждую мкс, для работы функций delay_ms и delay_us, так что, думаю общая нагрузка периодических прерываний не должна превышать 20%

    Насчет сигнала, я же снимал анализатором с реального дисковода и он там был именно таким как сейчас генерируется через RC.
    Последний раз редактировалось EvgenRU; 26.03.2016 в 19:23.

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

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

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

Похожие темы

  1. Ответов: 24
    Последнее: 08.12.2012, 19:00
  2. Тестер транзисторов на ATmega8
    от ILoveSpeccy в разделе Творчество
    Ответов: 10
    Последнее: 19.05.2011, 15:03
  3. Ответов: 0
    Последнее: 31.01.2007, 18:18

Ваши права

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