|
|
  |
STR710, считать считает, а диодами не моргает |
|
|
|
Apr 3 2008, 11:29
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 20-02-08
Пользователь №: 35 222

|
собрал проект для STR710, накидал простые вычисления, работает. Решил зажечь диоды и поиграться спикером, не работает. Проверил значения спец регистров, все присвоенные значения на месте, проверил значения АРВ по резету, их содержимое не соответствует отраженному в мануале. проверил соответствие классов, написанных для спец регистров, адресному пространству- все впорядке. Почему порты не работают. Код #include </home/sid/project/71x_map.h> void platformmain() { int i, o=1, pa=1;
/// светодиод APB2->CKDIS=0x00000000; APB2->SWRES=0x00000000;
GPIO0->PC0=0x0003; GPIO0->PC1=0x0000; GPIO0->PC2=0x0003;
GPIO0->PD=0x0001;
// спикер GPIO1->PC0=0x0080; GPIO1->PC1=0x0000; GPIO1->PC2=0x0080;
for(o;o<500;o++) { if(pa==1) { GPIO1->PD=0x0000; pa=0; } else { GPIO1->PD=0x0080; pa=1; } } for (;;);
}
Сообщение отредактировал Хомячог - Apr 3 2008, 11:34
|
|
|
|
|
Apr 3 2008, 14:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Хомячог @ Apr 3 2008, 14:29)  Почему порты не работают. А бибика бибикает? Я с ним работал давно и недолго, но глядя в ваш исходник: Код GPIO0->PC0=0x0003; GPIO0->PC1=0x0000; GPIO0->PC2=0x0003;
// спикер GPIO1->PC0=0x0080; GPIO1->PC1=0x0000; GPIO1->PC2=0x0080; вы второй записью затираете предыдущие значения.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 4 2008, 08:01
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 20-02-08
Пользователь №: 35 222

|
значения второй записи меняются в цикле (это я так привел, чтобы место не засорять, а так у меня цикл, который обеспечивает меандр), тк я не знаю от чего работает спикер, от уровня или от меандра. далее проклевались еще проблемы:
я за основу использую иаровский проект (пользуюсь связкой гцц + гдб), в котором есть файл где созданы стандартные структуры (для модулей камня), они содержат отражения на функциональные регистры. Создал там свою структуру по образу и подобию остальных (дабы через нее писать в озу например), когда начал ее пытаться использовать в маине при компиляции получил ошибку (а при созданной структуре, при ее неиспользовании ошибки нет). При использовании стандартных структур компилируется. Далее при попытке создать указателя также получаю ошибку.
стандартная вещь : GPIO0-> PD=0x0011 --- компилица моя вещь : buf1->nitrid=0х0005554 --- не компилица
забиваемые значения с учетом типа данных.
указатели тоже не пускают компилица: int* gg; int * gg; int *gg;
int* gg=45; int * gg=45; int *gg=45;
компилитор кричит: parse error
|
|
|
|
|
Apr 4 2008, 08:21
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Хомячог @ Apr 4 2008, 12:01)  значения второй записи меняются в цикле (это я так привел, чтобы место не засорять, а так у меня цикл, который обеспечивает меандр), тк я не знаю от чего работает спикер, от уровня или от меандра. Тогда смотрите, что получилось в ассемблере. Цитата(Хомячог @ Apr 4 2008, 12:01)  стандартная вещь : GPIO0-> PD=0x0011 --- компилица моя вещь : buf1->nitrid=0х0005554 --- не компилица Хоть бы написали, как ваша вещь - buf1 - объявлена. Цитата(Хомячог @ Apr 4 2008, 12:01)  указатели тоже не пускают компилица: Напишите подробно, где и как ругается компилятор.
|
|
|
|
|
Apr 4 2008, 08:27
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Хомячог @ Apr 4 2008, 11:01)  значения второй записи меняются в цикле (это я так привел, чтобы место не засорять, а так у меня цикл, который обеспечивает меандр), тк я не знаю от чего работает спикер, от уровня или от меандра. Ну не знаю. выкиньте все, оставьте только настройку одной ноги и дерганье ей. Вот это у меня работало: Код // GPIO1: Set pin 8 as push-pull output GPIO1->PC0 = (1<<8); GPIO1->PC1 = (0<<8); GPIO1->PC2 = (1<<8); .... GPIO1->PD &= ~(1<<8); // GPIO1.8 = 0, turn off LED .... GPIO1->PD |= (1<<8); // GPIO1.8 = 1, turn on LED Как видите, код от вашего не отличается. Почитайте еще про тактирование, но не думаю, что причина в нем - мне кажется что тактирование может влиять на чтение, но не на запись GPIO. Цитата(Хомячог @ Apr 4 2008, 11:01)  Создал там свою структуру по образу и подобию остальных (дабы через нее писать в озу например), когда начал ее пытаться использовать в маине при компиляции получил ошибку Телепатически можно предположить, что вы что-то не учли. Без кода точнее говорить сложно. Цитата(Хомячог @ Apr 4 2008, 11:01)  int *gg; int* gg=45; компилитор кричит: parse error Я бы тоже закричал. Присваивать целое указателю нельзя. А что вы хотели сделать этой записью?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 4 2008, 08:44
|
Участник

Группа: Свой
Сообщений: 52
Регистрация: 7-11-05
Из: Чебоксары
Пользователь №: 10 546

|
Код GPIO1->PD &= ~(1<<8); // GPIO1.8 = 0, turn off LED ... GPIO1->PD |= (1<<8); // GPIO1.8 = 1, turn on LED Вы уверены, что из ->PD можно читать? Если нет, то подобная конструкция может в GCC не прокатить, хотя IAR её пережевывает нормально.
|
|
|
|
|
Apr 4 2008, 10:00
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(yaghtn @ Apr 4 2008, 11:44)  Вы уверены, что из ->PD можно читать? Да, уверен. Цитата(yaghtn @ Apr 4 2008, 11:44)  Если нет, то подобная конструкция может в GCC не прокатить, хотя IAR её пережевывает нормально. Очень интересно. Какие именно свойства GCC заставляют его как-то по-особенному обрабатывать volatile const - переменную при доступе через указатель?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 4 2008, 10:53
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 20-02-08
Пользователь №: 35 222

|
привожу сокращенный вариант файла содержащего структуры, где АРВ стандартная фишка, а buf - плод окисленного воображения. Код * File Name : 71x_map.h #ifndef __71x_MAP_H #define __71x_MAP_H typedef volatile struct { vu32 CKDIS; vu32 SWRES; } APB_TypeDef;
typedef volatile struct { vu32 nitrid; } buf_typedef; /* Memory mapping */ #define buf1_base 0x20005000 #define nitrid (buf1_base + 0) #define RAM_BASE 0x20000000 #define APB1_BASE 0xC0000000 #define APB2_BASE 0xE0000000
#ifndef DEBUG #define buf1 ((buf_typedef *)buf1_base) #define APB1 ((APB_TypeDef *)(APB1_BASE+0x10)) #define APB2 ((APB_TypeDef *)(APB2_BASE+0x10)) #else /* DEBUG */ EXT buf_typedef *buf1; #ifdef _APB #ifdef _APB1 EXT APB_TypeDef *APB1; #endif #ifdef _APB2 EXT APB_TypeDef *APB2; #endif #endif #endif /* DEBUG */
#endif /* __71x_MAP_H */
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|