реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STR710, считать считает, а диодами не моргает
Хомячог
сообщение Apr 3 2008, 11:29
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 3 2008, 14:07
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Хомячог
сообщение Apr 4 2008, 08:01
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 4 2008, 08:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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) *
указатели тоже не пускают компилица:

Напишите подробно, где и как ругается компилятор.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 4 2008, 08:27
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
yaghtn
сообщение Apr 4 2008, 08:44
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 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 её пережевывает нормально.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 4 2008, 10:00
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Хомячог
сообщение Apr 4 2008, 10:53
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 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 */
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 4 2008, 11:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Хомячог @ Apr 4 2008, 14:53) *
Код

#define nitrid        (buf1_base + 0)

#define'ом нужно пользоваться аккуратненько, ага.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 09:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016