Перейти к содержанию
    

e-serg

Участник
  • Постов

    96
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о e-serg

  • Звание
    Частый гость
    Частый гость
  • День рождения 10.02.1970

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

2 738 просмотров профиля
  1. Ну ну, там вполне измеряемый и вычисляемый джиттер, трамвайная остановка, это в прерывании ноги переключать. Пятна на солнце призывать не надо, в системе не всегда один голый микроконтроллер.
  2. Вариант, проверен на stm32f107 такт таймера 1мкс. у таймера используются два канала сравнения, два канала DMA, две таблицы в памяти. по сравнению одного канала таймера, DMA транзакция из таблицы в GPIOx->BSRR устанавливаю или сбрасываю нужные пины выбранного порта. по сравнению другого канала, DMA burst из второй таблицы выбирается следующие два значения для каналов сравнения таймера. каналы срабатывают одновременно.
  3. Без охлаждение никак, а необходимость радиатора, вентилятора :) другой вопрос. Очень важное не сказали, размеры. В какие габариты хотите уложиться?
  4. 1. Limits: "File size: Upto 4G-1 bytes. (by FAT specs.)" 2. f_sync Используете?
  5. Это если hex. Сам вопрос странный, может человеку base64 поможет. что под ASCII подразумевается?
  6. Как раз побаловался STM8S903, вот что вышло: inline void ADC_Init() { /***************************************************/ ADC1->CR1 = 0; ADC1->CSR = 0 | 1 * (3 << 0) /**CH [3:0] **/ | 1 * ADC1_CSR_EOCIE | 0 * ADC1_CSR_AWDIE; ADC1->CR1 = 0 | 1 * ADC1_CR1_ADON | 0 * ADC1_CR1_CONT | 1 * (7 << 4); /** SPSEL[6:4] **/ ADC1->CR2 = 0 | 1 * ADC1_CR2_SCAN | 1 * ADC1_CR2_ALIGN /** 0: Left alignment, 1: Right alignment **/ | 0 * (0) /** EXTSEL[5:4] 00: Internal TIM1 TRGO, 01: External interrupt on ADC_ETR **/ | 1 * ADC1_CR2_EXTTRIG; ADC1->CR3 = 0 | 0 * ADC1_CR3_OVR | 0 * ADC1_CR3_DBUF; ADC1->CR1 = 0 | 1 * ADC1_CR1_ADON | 0 * ADC1_CR1_CONT | 1 * (7 << 4); /** SPSEL[6:4] **/ } extern volatile uint8_t rc[2]; INTERRUPT_HANDLER(ADC1_IRQHandler, 22) { uint8_t reg = ADC1->CSR; ADC1->CSR = 0 | 1 * (3 << 0) /**CH [3:0] **/ | 1 * ADC1_CSR_EOCIE | 0 * ADC1_CSR_AWDIE; rc[0] = ADC1->DB0RL >> 2; rc[0] |= ADC1->DB0RH << 6; rc[1] = ADC1->DB1RL >> 2; rc[1] |= ADC1->DB1RH << 6; } в регистре ADC1->CR1 пишу константу В прерывании для сброса флага загружаю константу, иначе проблемы сейчас проверил установил CONT и выключил EXTTRIG -> работает. 8000000 / 18 / 14 / 4 = 7936,5 тактовая HSI/2, частота прерываний ~7,39kHz похоже тоже 15 тактов, В даташите не сказано про защитный интервал между каналами, может это оно и есть?
  7. Пробовал на stm32f107 два таймера, захват на каждом, есть сомнение в синхронности. Для вашего варианта можно посмотреть в сторону DMA. По событиям от TIM8, запускать чтение(запись) регистров TIM2 или TIM5.
  8. делал похожее на таймере STM32F107 TIM_ETR внешний клок, TIM_CH захват события и запуск последовательности сама последовательность проигрывается TIM -> DMA -> GPIO, TIM -> DMA -> TIM джиттер убрал регистром, тактируемым внешним клоком. STM загружает и клокает модуляторы(DDS), запускает АЦП. работает :)
  9. Делал вывод последовательности с помощью RAM(uint32) -> DMA -> GPIO(BSRR), процессор STM32F107 пишу 1MHz, работает. запрос DMA формирует таймер. Вашу задачу надо проверить, где-то на грани фола возможно получится.
  10. Если идет речь о преднамеренном взломе, CRC не годится, ни как.
  11. к этой фразе более 20 лет, этот ключик "-j", у gnu make существует, новым его не назвать.
  12. Ключик -j очень старый, лет 10 назад он уже был старым. PS. 1989г, make, ключ -j уже имеется.
  13. DMA ничего не знает про программное FIFO, это автомат, раскладывает байты как приказали, вызывает прерывания, если настроили. По USART обратить на флаг IDLE На практике, у STM32F10x DMA работают вполне адекватно, описание в даташите "несколько странное". в одном из устройств интенсивно использую 5 каналов DMA, причем транзакции по некоторым запускаются синхронно, все нормально.
  14. ;******************************************************************************* *** ;******************************************************************************* *** ; код TEA128Y ; меняються регистры r4, ..., r25 ;******************************************************************************* *** #ifndef TEA128_INC_ #define TEA128_INC_ .DSEG d_TEA128_DATA: .BYTE 16 d_TEA128_KEY: .BYTE 16 ;******************************************************************************* *** .CSEG .def d0=r4 .def d1=r5 .def d2=r6 .def d3=r7 .def c0=r8 .def c1=r9 .def c2=r10 .def c3=r11 .def b0=r12 .def b1=r13 .def b2=r14 .def b3=r15 .def Tea_cnta=r16 .def Tea_cntb=r17 .def s0=r18 .def s1=r19 .def s2=r20 .def s3=r21 .def a0=r22 .def a1=r23 .def a2=r24 .def a3=r25 ;******************************************************************************* *** ;Обмен с памятью, загрузка костант .MACRO MLDI32 ;r3,r2,r1,r0, lab data ldi @0, @4 ldi @1, @5 ldi @2, @6 ldi @3, @7 .ENDMACRO .MACRO MLDD32 ;r3,r2,r1,r0, lab data ldd @3, Y+@4+0 ldd @2, Y+@4+1 ldd @1, Y+@4+2 ldd @0, Y+@4+3 .ENDMACRO .MACRO MLDS32 ;r3,r2,r1,r0, lab data lds @3, @4+0 lds @2, @4+1 lds @1, @4+2 lds @0, @4+3 .ENDMACRO .MACRO MSTD32 ;r3,r2,r1,r0, lab data std Y+@4+3, @0 std Y+@4+2, @1 std Y+@4+1, @2 std Y+@4+0, @3 .ENDMACRO .MACRO MSTS32 ;r3,r2,r1,r0, lab data sts @4+3, @0 sts @4+2, @1 sts @4+1, @2 sts @4+0, @3 .ENDMACRO .MACRO MSUBI32 ;r3,r2,r1,r0, data subi @3, @7 sbci @2, @6 sbci @1, @5 sbci @0, @4 .ENDMACRO .MACRO MCLR32 ;r3,r2,r1,r0 clr @0 clr @1 clr @2 clr @3 .ENDMACRO .MACRO MADD32 add @3, @7 adc @2, @6 adc @1, @5 adc @0, @4 .ENDMACRO .MACRO MSUB32 sub @3, @7 sbc @2, @6 sbc @1, @5 sbc @0, @4 .ENDMACRO .MACRO MLSL32 lsl @3 rol @2 rol @1 rol @0 .ENDMACRO .MACRO MLSR32 lsr @0 ror @1 ror @2 ror @3 .ENDMACRO .MACRO MEOR32 eor @3, @7 eor @2, @6 eor @1, @5 eor @0, @4 .ENDMACRO .MACRO FMEMCPY ldi ZL, low(@1 << 1) ldi ZH, high(@1 << 1) ldi XL, low(@0) ldi XH, high(@0) ldi r16, @2 call STX_LPM_LOOP .ENDMACRO ;******************************************************************************* *** ;******************************************************************************* *** ; кодирование ;******************************************************************************* *** ;******************************************************************************* *** Tea128_enc: ; lds YL, d_TEA128_DATA_L ; lds YH, d_TEA128_DATA_H ldi Tea_cnta,32 MCLR32 s3, s2, s1, s0 ;sum Tea128_enc_while: MSUBI32 s3, s2, s1, s0, 0x61, 0xc8, 0x86, 0x47 ; sum += delta ;******************************************************************************* *** rcall lfunc_y MADD32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Сохранил y ;******************************************************************************* *** rcall lfunc_z MADD32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Сохранил z ;******************************************************************************* *** dec Tea_cnta breq Tea128_enc_end rjmp Tea128_enc_while Tea128_enc_end: ret ;******************************************************************************* *** ;******************************************************************************* *** ; декодирование ;******************************************************************************* *** Tea128_dec: ; lds YL, d_TEA128_DATA_L ; lds YH, d_TEA128_DATA_H ldi Tea_cnta,32 MLDI32 s3, s2, s1, s0, 0xC6, 0xEF, 0x37, 0x20 ;sum Tea128_dec_while: ;******************************************************************************* *** rcall lfunc_z MSUB32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Сохранил z ;******************************************************************************* *** rcall lfunc_y MSUB32 a3, a2, a1, a0, d3, d2, d1, d0 MSTD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Сохранил y ;******************************************************************************* *** MSUBI32 s3, s2, s1, s0, 0x9E, 0x37, 0x79, 0xB9 ; sum -= delta dec Tea_cnta breq Tea128_dec_end rjmp Tea128_dec_while Tea128_dec_end: ret ;******************************************************************************* *** lfunc: movw d0,a0 movw d2,a2 ldi Tea_cntb,4 lshift4: MLSL32 d3, d2, d1, d0 dec Tea_cntb brne lshift4 MADD32 d3, d2, d1, d0, b3, b2, b1, b0 ;воспользуюсь b0...3 movw b0,a0 movw b2,a2 ldi Tea_cntb,5 rshift5: MLSR32 b3, b2, b1, b0 dec Tea_cntb brne rshift5 MADD32 b3, b2, b1, b0, c3, c2, c1, c0 MEOR32 d3, d2, d1, d0, b3, b2, b1, b0 MADD32 a3, a2, a1, a0, s3, s2, s1, s0 MEOR32 d3, d2, d1, d0, a3, a2, a1, a0 ret ;******************************************************************************* *** lfunc_y: MLDD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Загрузил z MLDS32 b3, b2, b1, b0, d_TEA128_KEY+0 ; Загрузил k[0] MLDS32 c3, c2, c1, c0, d_TEA128_KEY+4 ; Загрузил k[1] rcall lfunc ; результата d0...3 MLDD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Загрузил y ret ;******************************************************************************* *** lfunc_z: MLDD32 a3, a2, a1, a0, 0;d_TEA128_DATA+0 ; Загрузил y MLDS32 b3, b2, b1, b0, d_TEA128_KEY+8 ; Загрузил k[2] MLDS32 c3, c2, c1, c0, d_TEA128_KEY+12 ; Загрузил k[3] rcall lfunc ; результата d0...3 MLDD32 a3, a2, a1, a0, 4;d_TEA128_DATA+4 ; Загрузил z ret ;******************************************************************************* *** d_TEA128_KEY_DB: .db 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff TEA128_KEY_INIT: ; ldi YL, low(d_TEA128_DATA) ; ldi YH, high(d_TEA128_DATA) ; sts d_TEA128_DATA_L, YL ; sts d_TEA128_DATA_H, YH FMEMCPY d_TEA128_KEY, d_TEA128_KEY_DB, 16 ret #endif /* TEA128_INC_ */ вот математика на asm, давно делал :) RTEA может выйти и покороче.
×
×
  • Создать...