Obam 36 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Запустите ядро ядро мегагерцах на 30-ти. Что будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rudy_b 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Делитель (1/8) работает с клоками APB1. А есть еще делитель самих клоков APB1 относительно клоков проца (APB1_Prescaler), его тоже нужно знать. А макисмальная частота APB1 - 30 Мгц, т.е. делитель - не менее 1/8. В результате общее деление, скорее всего, равно 1/64. Но это данные для Stm32F207, для F4 частота APB1 может и отличаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 36 9 сентября, 2015 Опубликовано 9 сентября, 2015 (изменено) · Жалоба Если уж исследовать, то не грех подтянуть частоту SPI к частоте ядра. Положим, ядро "затормозим", APB1_Prescaler=1 и fPCLK=4; вход\выход из подпрограмм занимает (нормально занимает) что-то, вот и будет видно как флаги в SPI успевают\не успевают к опросу. Надеюсь TS под JTAGом отлаживается? Изменено 9 сентября, 2015 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 10 сентября, 2015 Опубликовано 10 сентября, 2015 · Жалоба Как вы выходите из положения? Мы в такое положение не попадаем, так как всегда работаем с SPI через DMA или хотя-бы посредством прерываний. ;) Чего и Вам советуем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 10 сентября, 2015 Опубликовано 10 сентября, 2015 · Жалоба Друзья, не могу понять в чем дело. На эту тему уже было большое обсуждение. Вкратце вывод таков: надо ждать RXNE, и потом ещё несколько тактов, в зависимости от скорости и режима SPI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 10 сентября, 2015 Опубликовано 10 сентября, 2015 (изменено) · Жалоба Ладно, с этм разберусь когда железяку запущу хоть как-то. Идея в целом понятна. По результатам дам знать. Спасибо за разжевывание ))) Пока что возник следующий проблем: Что-то записываю в слейв, потом пытаюсь прочитать и... не вижу клока для чтения. void mcp_read(uint8_t addr) { GPIO_ResetBits(GPIOB, GPIO_Pin_11); spi2_send(0x41); spi2_send(addr); SPI_I2S_ReceiveData(SPI2); GPIO_SetBits(GPIOB, GPIO_Pin_11); } ... mcp_write(0x05, 0x20); // IOCON mcp_write(0x00, 0x00); // IODIR mcp_write(0x01, 0xA5); // IPOL mcp_read(0x01); // IPOL Я вижу что слейв что-то пытается выдать на свой SDO, но т.к. нет клока, то слейв обламывается и мой мастер ничего не принимает... Что за очередной бред? (Мы щас пока не трогаем всякие прерывания и прочие DMA). Соответственно, никакие прерывания не дергаются. Изменено 10 сентября, 2015 пользователем ilkz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 10 сентября, 2015 Опубликовано 10 сентября, 2015 · Жалоба Потому что StdLib - ад и ужас. Клок на шине выставляет мастер. Чтобы он это сделал, ему надо сказать "передавай". Этот StdLib так не делает, хотя, если судить только по названиям функций, должен. Т.е. берём и делаем ОДНУ функцию uint8_t Rw(uint8_t out = 0xFF) { SPIx->DR = out; while (!(SPIx->SR & SPI_SR_RXNE)); return SPIx->DR; } (украдено из Stm32tpl авторства AHTOXA) и вызываем (сиплюсплюс): mcp.Active (); mcp.Rw (0x41); mcp.Rw (addr); uint8_t res = mcp.Rw (); mcp.Deactive (); return res; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба Потому что StdLib - ад и ужас. Клок на шине выставляет мастер. Чтобы он это сделал, ему надо сказать "передавай". Этот StdLib так не делает, хотя, если судить только по названиям функций, должен. Т.е. берём и делаем ОДНУ функцию Т.е., чтобы что-то прочитать - надо что-то записать. Люююто. А как быть, если нужно прочитать много байт, а слейв не допускает dummy-записей? Ну, то есть, во время записи dummy-слов слейв может на них как-то отреагировать, т.к. для него это будут команды какие-нибудь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба Ну тут надо немного подумать. Как слейв узнает пишите вы или нет:)? Клоки то чтобы данные забрать все равно идут:))))) Это же не РС232 где есть факт начала записи. Смотрите описание, там написано в каком состоянии нога должна быть в 1 шлите FF, в 0 шлите 00, скорее всего там будет в состоянии пофиг.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 36 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба "А как быть, если нужно прочитать много байт, а слейв не допускает dummy-записей?" Тогда это не SPI: SCK тактируют одновременно и MOSI и MISO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба Ну в принципе да, в командах всегда есть флаг R/W. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 36 11 сентября, 2015 Опубликовано 11 сентября, 2015 (изменено) · Жалоба ilkz, попробуете замедлить ядро чтобы SPI успевал обновлять флаги к опросу? Изменено 11 сентября, 2015 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба Вкратце вывод таков: надо ждать RXNE, и потом ещё несколько тактов, в зависимости от скорости и режима SPI. Жесть какая.... Вот ответ на вопрос, почему я в своих проектах стараюсь не использовать STM32.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 11 сентября, 2015 Опубликовано 11 сентября, 2015 (изменено) · Жалоба Напоминаю, что дождавшись RXNE надо обязательно прочитать DR, нужен он Вам или нет... И дуло исчезнет... И жести не будет. Изменено 11 сентября, 2015 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 226 11 сентября, 2015 Опубликовано 11 сентября, 2015 · Жалоба Напоминаю, что дождавшись RXNE надо обязательно прочитать DR, нужен он Вам или нет... И дуло исчезнет... И жести не будет. Думаете всё-таки рискнуть и применить в следующей (как раз намечающейся) разработке STM32? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться