|
Как оценить время в Keil, Не могу посчитать количество тактов |
|
|
|
 |
Ответов
|
Apr 6 2010, 15:59
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Продолжаю терзать at91sam7s256. Привожу код который я написал для работы с SPI. Самое удивительное (для меня) и чему я не могу найти объяснения - это то, что код этот нормально работал (писал на SD-карточку), а теперь перестал работать. Код ///////////////////////////////////////////////////////////////////////////// void CONFIG_SPI () { pSPI -> SPI_MR = AT91C_SPI_MSTR | AT91C_SPI_MODFDIS | (AT91C_SPI_PCS & (0x0D << 16)); //Master mode, use freq divider, select 1 chanel CS. pSPI -> SPI_CSR[1] = AT91C_SPI_NCPHA | AT91C_SPI_BITS_8 | AT91C_SPI_CSAAT | (AT91C_SPI_SCBR & (SCBR << 8)); // clock idle low, data valid on rising edge, 8-bit data pSPI -> SPI_CR = AT91C_SPI_SPIEN | AT91C_SPI_LASTXFER; } ///////////////////////////////////////////////////////////////////////////////////// char SPI (char DATA) { pSPI -> SPI_TDR = DATA; while (!(pSPI -> SPI_SR & AT91C_SPI_TDRE)); /* Wait for Empty Tx Buffer */ while (!(pSPI -> SPI_SR & AT91C_SPI_RDRF)); return (pSPI -> SPI_RDR & 0xFF); } //////////////////////////////////////////////////////////////////////////////////// Просьба помочь найти ошибку.
|
|
|
|
|
Apr 6 2010, 16:26
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(aaarrr @ Apr 6 2010, 19:08)  Предлагаете угадать, как именно он "перестал работать"? Да нет же. Может в коде какая-то ошибка... Отладчиком дохожу до условия - Код while (!(pSPI -> SPI_SR & AT91C_SPI_TDRE)); /* Wait for Empty Tx Buffer */ - и зависаю здесь, не могу дождаться этого флага. Линия CS в низкий уровень после загрузки SPI_TDR тоже не переводится. Такое впечатление, что SPI вообще не включен.
|
|
|
|
|
Apr 6 2010, 16:44
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(aaarrr @ Apr 6 2010, 19:39)  А он включен? Выложите весь код, относящийся к SPI. Код void PIO_INIT () { pP_M_C -> PMC_PCER = pP_M_C -> PMC_PCER | 0x00000024; // Enable clocking of SPI and PIO (PIO clk enable for reading input state) pPIO -> PIO_PDR = 0x80027000; // disable PA17 I/O for PCK1 out and PA12,13,14,31 for SPI pPIO -> PIO_PER = 0x00240800; // enable PA21, PA18 and PA11 I/O pPIO -> PIO_PPUDR = 0xFFFFFCFF; // Turn off pull-up resistor except 8 and 9 pPIO -> PIO_ODR = 0x200014FF; // Enable input for PIO PA29, PA12, PA10, PA0-PA7 pPIO -> PIO_OER = pPIO -> PIO_OER | 0x00240800; // Enable out for PA11(CAMERA ON/OFF) and PA21 (ON/OFF SDcard) and PA18 (RED_LED) } Использую такие дефайны: Код #define SCBR ((MCK/SPCK)) /*SPI Baud Rate Divisor */
#define SPCK 18000000 /* SPI Baud Rate */
#define QUARTZ 20000000
#define FREQ_DIV 10
#define FREQ_MUL 89
#define MCK (((QUARTZ*(FREQ_MUL+1)/FREQ_DIV))/2) Код AT91S_SPI * pSPI = AT91C_BASE_SPI;
Сообщение отредактировал Nikitoc - Apr 6 2010, 16:50
|
|
|
|
Сообщений в этой теме
Nikitoc Как оценить время в Keil Mar 16 2010, 14:30 aaarrr Цитата(Nikitoc @ Mar 16 2010, 17:30) Посо... Mar 16 2010, 15:09 Nikitoc Цитата(aaarrr @ Mar 16 2010, 19:09) Debug... Mar 16 2010, 18:48  aaarrr Цитата(Nikitoc @ Mar 16 2010, 21:48) А ес... Mar 16 2010, 19:31   Nikitoc Цитата(aaarrr @ Mar 16 2010, 22:31) И бли... Mar 16 2010, 20:24 aaarrr Поподробнее можно посмотреть в даташите. Если крат... Mar 16 2010, 20:30 Nikitoc Угу, ясненько. И если можно последний моментик: Вы... Mar 16 2010, 20:39 aaarrr Периферия находится на "медленной" шине ... Mar 16 2010, 20:46 Nikitoc Цитата(aaarrr @ Mar 16 2010, 23:46) Периф... Mar 16 2010, 20:53 Nikitoc Типа отчет, о том что получилось. Тестовая програ... Mar 19 2010, 12:23 aaarrr Цитата(Nikitoc @ Mar 19 2010, 15:23) Мне ... Mar 19 2010, 13:24  Nikitoc Цитата(aaarrr @ Mar 19 2010, 17:24) Ошиба... Mar 19 2010, 13:47   aaarrr Цитата(Nikitoc @ Mar 19 2010, 16:47) А не... Mar 19 2010, 14:14    Nikitoc Цитата(aaarrr @ Mar 19 2010, 18:14) В дат... Mar 19 2010, 14:27     RabidRabbit Цитата(Nikitoc @ Mar 19 2010, 17:27) Я зд... Mar 19 2010, 20:29     aaarrr Цитата(Nikitoc @ Mar 19 2010, 17:27) КодA... Mar 19 2010, 20:37      Nikitoc Огромное спасибо за пояснения уважаемым гуру. Я, в... Mar 19 2010, 22:45       aaarrr Цитата(Nikitoc @ Mar 20 2010, 01:45) Врод... Mar 19 2010, 22:51   defunct Цитата(Nikitoc @ Mar 19 2010, 15:47) А не... Mar 21 2010, 00:23 toweroff ЦитатаAT91C_BASE_PIOA -> PIO_SODR = AT91C_BASE_... Mar 19 2010, 20:04 Nikitoc Хм. Ну ладно, но нафига тогда эта петрушка со смещ... Mar 19 2010, 23:11 aaarrr Потому что в 32 бита команды не получится упихать ... Mar 19 2010, 23:15 Nikitoc Да я вообще и пытаюсь это делать. Но блин, тяжело ... Mar 19 2010, 23:27 aaarrr Цитата(Nikitoc @ Mar 20 2010, 02:27) Да я... Mar 19 2010, 23:39 Nikitoc Пасибки. Попробую дочитать хотя бы до половины ... Mar 20 2010, 09:49 aaarrr По такой логике LDR и STR должны занимать одинаков... Mar 21 2010, 01:11 defunct Цитата(aaarrr @ Mar 21 2010, 03:11) По та... Mar 21 2010, 01:34  aaarrr Цитата(defunct @ Mar 21 2010, 04:34) ...А... Mar 21 2010, 01:47   defunct Цитата(aaarrr @ Mar 21 2010, 03:47) И мож... Mar 21 2010, 02:09 aaarrr pP_M_C чему равен? И зачем вообще использовать эти... Apr 6 2010, 17:12 Nikitoc ЦитатаpP_M_C чему равен? И зачем вообще использова... Apr 6 2010, 17:27 aaarrr Для write only есть соответствующие status-регистр... Apr 6 2010, 17:29 Nikitoc Цитата(aaarrr @ Apr 6 2010, 20:29) Провер... Apr 6 2010, 17:33 Nikitoc Вот здесь http://electronix.ru/forum/index.php?sho... Apr 6 2010, 19:02 aaarrr Цитата(Nikitoc @ Apr 6 2010, 23:02) ...я ... Apr 6 2010, 19:21  Nikitoc Проблема решилась. Оказалось что SD-шка мертвая. П... Apr 7 2010, 09:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|