Реанимация древних машин. На фанерке.

Аватара пользователя
egor1
Banned user
Сообщения: 163
Зарегистрирован: 13 окт 2016, 18:49
Откуда: МО

Re: Реанимация древних машин. На фанерке.

Сообщение egor1 »

тогда по-моему SPI не будет.....
то есть при старте системы должен отрабатываться PD5 (17 вывод). если он в единице, то пойдет инициализация UART.
если он в нуле, то в регистр MCUCR должно записаться
MCUCR = (1<<SPIPS);
и пойти инициализация SPI
Не стоит прислушиваться к моему мнению- оно бывает ошибочным.
Аватара пользователя
Komrad
Сообщения: 2699
Зарегистрирован: 27 авг 2011, 21:07

Re: Реанимация древних машин. На фанерке.

Сообщение Komrad »

Егор, давай без домыслов и аналогий. USART работает по инструкции из даташита, SPI инициализирова по даташиту, функция передачи по SPI тоже из шиита. Теперь посмотри сам есть ли там приведенные тобой инструкции. В даташитах тоже не все гладко бывает, ну, так пишут... Спроси у Регрессора, он силён в прогерстве.
Regressor
Сообщения: 46
Зарегистрирован: 23 окт 2016, 06:52

Re: Реанимация древних машин. На фанерке.

Сообщение Regressor »

Komrad... Я в коде вижу только это:

Код: Выделить всё

in      r24, MCUCR    ; MCU Control Register
ori     r24, 0b111     ; IVCE = 1 (enable Interrupt Vector Change)
                              ; IVSEL = 1 (Interrupt Vector Select)
                              ; XXX = 1 (What the fuck ???)
out     MCUCR, r24   ; MCU Control Register
Больше в коде обращений к MCUCR я не нашел. Биты 0,1 ставятся в 1 это нормально, а вот выставляемый в 1 бит 2 в даташите отсутствует.
И да - бит 7 (SPIPS) не выставляется. Может бажные дефайны ?

Опа. Меня терзают смутные сомнения.... А ведь 0b111 это 7... Komrad, а скажи ты можешь посмотреть у себя как определено значение SPIPS ? Если SPIPS не маска, а номер бита, то и получается такой очешуенный код. По идее тогда правильно будет

MCUCR |=(1 << SPIPS);

Посмотрел все еще раз внимательно. Komrad, это и есть бага. Можно смело менять MCUCR |=SPIPS; на MCUCR |=(1 << SPIPS);
Аватара пользователя
egor1
Banned user
Сообщения: 163
Зарегистрирован: 13 окт 2016, 18:49
Откуда: МО

Re: Реанимация древних машин. На фанерке.

Сообщение egor1 »

Regressor писал(а):
25 окт 2017, 01:39

Посмотрел все еще раз внимательно. Komrad, это и есть бага. Можно смело менять MCUCR |=SPIPS; на MCUCR |=(1 << SPIPS);
спсибо
сорри, но все-таки может
MCUCR = (1<<SPIPS);
т.е. без вертикальной черты. я так понимаю она ставится когда идет перечисление...ну тип а так (это пример)
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
Не стоит прислушиваться к моему мнению- оно бывает ошибочным.
Regressor
Сообщения: 46
Зарегистрирован: 23 окт 2016, 06:52

Re: Реанимация древних машин. На фанерке.

Сообщение Regressor »

Срочно учить матчасть!
Вертикальная черта означает операцию логического или (OR). Соответственно в С строчка
MCUCR |= (1<<SPIPS); означает
MCUCR = MCUCR | (1<<SPIPS);
Т.е. мы устанавливаем в 1 только один единственный бит - 7ой. Все остальные биты остаются как есть.

Запись вида MCUCR = (1<<SPIPS); приведет к записи в регистр 7 нулей и 1 единицы и все значения что там были будут перезаписаны.
Не стоит этого делать.

З.Ы. MCUCR |= SPIPS дает в результате MCUCR = MCUCR | 7 В результате биты с 0 по 2 будут равны 1.
Оператор << сдвигает первый операнд (1) на SPIPS битов (7) и в итоге дает число 128 (что битами будет 10000000).

egor1, рекомендую изучить с лупой вот эту статью: https://learnc.info/c/bitwise_operators.html
Битовые операции это базис в программировании микроконтроллеров - без их понимания будет грустно и непонятно.
Как мне сейчас грустно глядеть на некоторые части схемы без понимания как оно работает :)

Вообще я думаю сообща у нас знаний в электронике и программировании хватит, чтобы фанерку до ума довести...
Последний раз редактировалось Regressor 25 окт 2017, 08:19, всего редактировалось 2 раза.
Аватара пользователя
Komrad
Сообщения: 2699
Зарегистрирован: 27 авг 2011, 21:07

Re: Реанимация древних машин. На фанерке.

Сообщение Komrad »

Вот и даташит, мать его. Говорил мне папа - не вірь написаному. Однако интерес возраждается...
Аватара пользователя
egor1
Banned user
Сообщения: 163
Зарегистрирован: 13 окт 2016, 18:49
Откуда: МО

Re: Реанимация древних машин. На фанерке.

Сообщение egor1 »

Regressor писал(а):
25 окт 2017, 07:54

Оператор << сдвигает первый операнд (1) на SPIPS битов (7) и в итоге дает число 128 (что битами будет 10000000).
то есть в прошиве альтернативный порт правильно прописан?
Не стоит прислушиваться к моему мнению- оно бывает ошибочным.
Regressor
Сообщения: 46
Зарегистрирован: 23 окт 2016, 06:52

Re: Реанимация древних машин. На фанерке.

Сообщение Regressor »

Нет, в прошиве сейчас бит SPIPS не меняется и соответственно альтернативка не задается. В даташите ошибка - он тупо не совпадает с константами в среде программирования.
Regressor
Сообщения: 46
Зарегистрирован: 23 окт 2016, 06:52

Re: Реанимация древних машин. На фанерке.

Сообщение Regressor »

Komrad, самое смешное в данной ситуации то, что когда я ковырял прошивку в начале этого года я ведь заметил в этом месте, что какая-то ерундистика происходит и биты меняются, отсутствующие в даташите. Но решил, что я что-то не так отреверсил, поставил коммент "XXX = 1 (What the fuck ???)" И пошел дальше ковырять. Надо будет посмотреть базу на предмет других похожих комментариев...
Аватара пользователя
egor1
Banned user
Сообщения: 163
Зарегистрирован: 13 окт 2016, 18:49
Откуда: МО

Re: Реанимация древних машин. На фанерке.

Сообщение egor1 »

Regressor писал(а):
25 окт 2017, 09:20
Надо будет посмотреть базу на предмет других похожих комментариев...
и много там таких? :D
Не стоит прислушиваться к моему мнению- оно бывает ошибочным.
Ответить