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

pavel-pervomaysk

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о pavel-pervomaysk

  • Звание
    Местный
    Местный
  • День рождения 02.05.1986

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

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

5 097 просмотров профиля
  1. Любая подпрограмма из закрытой области BOOT вызывается без проблем, так и наоборот из обрасти BOOT можно выполнить любую операцию (если она не завязана на прерывания и перенастройку периферии). Векторы прерываний надо переключать, после перехода из BOOT -> MAIN и наоборот. Это ведь для нас код как бы скрыт, для проца данные всегда в читабельном виде. Просто встроенный в процессор загрузчик в зависимости от состояния локбитов выдает нам одно либо другое. Немного из моей практики. К примеру есть у Вас протокол, по которому Вы обновляете ПО, это будет UART, CAN, или свой какой-то 1-wire, о котором никто никогда и не догадается. Для обновления прошивки не обязательно дергать ресетами, зажимать кнопки, итд. В MAIN пишем обработчик "секретной" посылки, (он же обязан быть и в секции BOOT)! Перешли в бут и работаем с бутом. Аналогично схожей командой и вышли от туда. Кстати, сам не пользуюсь загрузчиками от ATMEL, пишу свои. Стояла задача работать с областями Flash, EEprom, External i2c. Лень было каждую 24схх в программаторе писать.
  2. Код покажите. Если прерывание постоянно куда-то уводит PC, со стеком может быть непорядок.
  3. CAN на AT90CAN128

    Что значит не заработало? Если сообщение принято, контроллер отправит АСК.
  4. CAN на AT90CAN128

    Прочитайте даташит ВНИМАТЕЛЬНО, и желательно начиная с 19. Controller Area Network - CAN Я дал пример инициализации для работы в нормальном режиме. Нет же, надо принудительно включить LISTEN и все...
  5. CAN на AT90CAN128

    Датчиков с CAN я не встречал. Датчики обрабатывает зачастую МК. Для HIGH SPEED CAN напряжение между CANH CANL 2-2.5V это нормально. Настраиваем прием Mailbox 14 для сообщений с адресом 777H CANGCON=2 ; CANGSTA=0 ; CANGIT=0 ; CANGIE=0b00000000 ; ;------------------------------------------------------------------------------- ; Interrupt Enable & Disable for Mob 14...0 ;Mob 14,13,12,11,10,9,8; - IEMOB14 IEMOB13 IEMOB12 IEMOB11 IEMOB10 IEMOB9 IEMOB8 ldi tmp,0b01000000 ; Mailbox 14 - interrupt mode! sts CANIE1,tmp ; Can Enable Interrupt MOb Register BAUD 250 000 ; CAN 8 bit 250 Kbps 16 MHz ; Sample Point at 75% CANBT1=0x0E CANBT2=4 CANBT3=13H ;------------------------- CANTCON=0 CANTIML=0 CANTIMH=0 CANTTCL=0 CANTTCH=0 CANTEC=0 CANREC=0 CANHPMOB=0 CANSTMOB=0 CANSTML=0 CANSTMH=0 Инициализируем: CANPAGE=E0H; MailBox 14; CANMESSAGE 0-7; E0 - High nibble Mailbox index; E0-CANMSG[0]; E1-CANMSG[1]; E2-CANMSG[2]; E3-CANMSG[3]; E4-CANMSG[4]; E5-CANMSG[5]; E6-CANMSG[6]; E7-CANMSG[7]; Устанавливаем MID: Message ID. Читаем даташит. CANIDT4 CANIDT3 CANIDT2 CANIDT1 = (777H << 21); Устанавливаем маску (фильтр диапазона принимаемых сообщений): Опять читаем даташит. CANIDM4 CANIDM3 CANIDM2 CANIDM1 = (7FFH << 21); Фильтр указанного ID Full filtering: to accept only ID = 0x317 in part A. - ID MSK = 111 1111 1111 b - ID TAG = 011 0001 0111 b Диапазон работы фильтра Partiel filtering: to accept ID from 0x310 up to 0x317 in part A. - ID MSK = 111 1111 1000 b - ID TAG = 011 0001 0xxx b Без фильтра No filtering: to accept all ID’s from 0x000 up to 0x7FF in part A. - ID MSK = 000 0000 0000 b - ID TAG = xxx xxxx xxxx b Затем обрабатываем прерывание Смотрим lds tmp,CANSIT1 проверяем бит 6, если он, достаем сообщение, обрабатываем, отвечаем. Все. Получаем сообщение CANPAGE=E0H; MailBox 14; CAN0=CANMSG[0]; CANPAGE=E1H; MailBox 14; CAN1=CANMSG[1]; и так до 8го байта.
  6. CAN на AT90CAN128

    Приниматься будут все сообщения 11 и 29 бит. Мы можем их фильтровать только. Флаг IDE проверили, далее решили как считать MID. Для начала начинать надо передавать сообщения корректно. Ловить вторым устройством. Может банально неправильно Baud настроен, я с 250к не работал, такое только в BMW и газелях встречается.
  7. Есть очень много нюансов. .dseg - RAM. .cseg - code segment (дынные во FLASH) .eseg EEprom segment (данные EEProm) для примера нам надо застолбить оперативку .dseg .org SRAM_START blah-blah .cseg org 0 это есть RESET вектор. и дальше погнали. .eseg .org 0 .db "Our EEprom area"
  8. CAN на AT90CAN128

    Настроили CAN модуль. 19.11.2 CAN MOb Control and DLC Register - CANCDMOB CONMOB1 CONMOB0 RPLV IDE DLC3 DLC2 DLC1 DLC0 Bits 7;6; 00 - disable; 01 - enable transmission. Отправляем подготовленный маилбокс ;ID11 ldi tmp,0x48 ; High nibble (4-11bit);(5-29bit); low nibble&7(DLC) ;ID29 ldi tmp,0x58 ; High nibble (4-11bit);(5-29bit); low nibble&7(DLC) и ждем пока установится TXOK в регистре CANSTMOB 10 - перезапись при приеме сообщений маилбокса 11 - приняли сообщение, и пока его не обработаем, оно там будет сидеть. Посоветую еще купить CAN анализатор, очень пригодится, если планируешь работать с шиной. Ато читаю что сообщения друг другу посылаются хаотично - уши заворачиваются....
  9. CAN на AT90CAN128

    CAN контроллер у AT90CAN очень таки неплох, если с ним разобраться... 15 маилбоксов. Внимательно почитать надо про CANPAGE. Рулится все через него. Очень хотелось бы чтобы было как в нормальных процессорах типа NEC, своя отдельная область с произвольным доступом, но нет тут такого. Я настравиваю 1 на передачу Следующими настраиваю фильтр для каждого принимающего маилбокса! Прием работает по прерыванию. Сработало прерывание, проверил забрал данные с маилбокса. ;----------------------; can_handler: ; CAN Transfer Complete or Error push tmp ; in tmp,SREG ; push tmp ; out TCNT0,zero ; Clean TCNT0 lds temp,CANPAGE ; Store CANPAGE ;----------------------; lds tmp,CANSIT2 ; MOB1 RX interrupt! sbrc tmp,SIT5 ; skip if SIT5 =0 rcall _crxi ; SIT5?1{MOB5_interrupt} ;----------------------; sts CANPAGE,temp ; Restore CANPAGE pop tmp ; out SREG,tmp ; pop tmp ; reti ; return from interrupt ;----------------------; _crxi: ; CAN RX MOB in interrupt mode! inc mode ; sbi canlp,crxl ; Can RX Led ON; ldi tmp,mob5 ; Select MOB5 sts _rmob,tmp ; sts CANPAGE,tmp ; SET MOB5 sts CANSTMOB,zero ; clear status register rcall read_mobx ; READ MOB5, save in RAM! lds tmp,CANCDMOB ; Load register ori tmp,RXmes ; SET RX flag! sts CANCDMOB,tmp ; save register ;cbi canlp,crxl ; Can RX Led OFF; ret ; return ;----------------------; ;--- Read MOB 8 bytes ; ; save in RAM (_CRXA) ; read_mobx: ; read data from MOB area and save in RAM push tmp ; Save tmp in STACK push loop2 ; Save Loop2 in STACK push yl ; Save YL in STACK push yh ; Save YH in STACK ;----------------------; clr loop2 ; ldi yl,low (_CRXA) ; Load address ldi yh,high(_CRXA) ; can_rx Array space in RAM ldi loop,8 ; data bytes length ;----------------------; rmc: ; Read_mob_cycle <----| lds tmp,_rmob ; | or loop2,tmp ; Mob number (0...5) | sts CANPAGE,loop2 ; 0...7 | lds tmp,CANMSG ; tmp=CANMSG with pointer loop2 | st y+,tmp ; save in SDRAM with pointer Y tmp | inc loop2 ; loop2 = +1 | dec loop ; loop=-1 | brne rmc ; -----------------------------------| ;----------------------; pop yh ; pop yl ; pop loop2 ; pop tmp ; ret ; return ;----------------------; ;----------------------; Что можно сделать на этом проце не напрягаясь: Принимаит 14 различных "отфильтрованных" ID в прерывании, обрабатывать их, отвечать на них. Больше 16 ID стречается только в приборных панелях автомобилей 32-64.
  10. Ардуино предназначен для новичков в первую очередь. Из плюсов бута - не слетят фузы, не мешает SPI, проще схемотехника CH341 прилепили и все. Сам пользуюсь бутом для своей поделки одной, проще шить по k-line, чем каждый раз SPI вешать.
  11. Если проекты не копеешные - ICE3 без корпуса вполне гуманная вещь. В 4й студии не работает :(. Свистки с алиекспресса не бери, полный шииит.
  12. Присылай свои 27С512 и прошивку, запишу. У меня есть штук 19 W27C512, занимался "цыганским тюннингом" автомобилей, могу записать и выслать. Ато я вижу тут вилами махаться начнете, но в итоге прогер не купится. А если и купится, начнется очень много вопросов как потом стереть одноразовую память
  13. Жесть!, 10 лет и работать только в паралельном режиме. Скорее всего там только сборкой занимаются. Не представляю себе такую отладку на Mega в QFP32-100 с плотным обвесом. Программатор через COM + стабилитроны (конипрог) на удачу. У меня STK500 USB By Petka иногда чудеса творит на длинном шлейфе В плане протекта мое мнение. Кто-то может сказать, что в паралельном режиме они ставят максимум защиты, RSTDSBL; SPIEN; но хочу Вас успокоить, все это бесполезно и никак на защиту не влияет. В итоге + 1 нога RST (очень хорошо только для ATtiny13) и куча головняка для ATmega.
  14. Прочитаешь ты его, а дальше что? Если вопрос возник на этом этапе так сугубо, то пересчитать прибор будет еще сложнее.
×
×
  • Создать...