Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STR710
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Хомячог
собрал проект для 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, 14:29) *
Почему порты не работают.

А бибика бибикает? Я с ним работал давно и недолго, но глядя в ваш исходник:
Код
GPIO0->PC0=0x0003;
GPIO0->PC1=0x0000;
GPIO0->PC2=0x0003;

// спикер
GPIO1->PC0=0x0080;
GPIO1->PC1=0x0000;
GPIO1->PC2=0x0080;
вы второй записью затираете предыдущие значения.
Хомячог
значения второй записи меняются в цикле (это я так привел, чтобы место не засорять, а так у меня цикл, который обеспечивает меандр), тк я не знаю от чего работает спикер, от уровня или от меандра.
далее проклевались еще проблемы:

я за основу использую иаровский проект (пользуюсь связкой гцц + гдб), в котором есть файл где созданы стандартные структуры (для модулей камня), они содержат отражения на функциональные регистры. Создал там свою структуру по образу и подобию остальных (дабы через нее писать в озу например), когда начал ее пытаться использовать в маине при компиляции получил ошибку (а при созданной структуре, при ее неиспользовании ошибки нет). При использовании стандартных структур компилируется.
Далее при попытке создать указателя также получаю ошибку.

стандартная вещь : GPIO0-> PD=0x0011 --- компилица
моя вещь : buf1->nitrid=0х0005554 --- не компилица

забиваемые значения с учетом типа данных.

указатели тоже не пускают компилица:
int* gg;
int * gg;
int *gg;


int* gg=45;
int * gg=45;
int *gg=45;

компилитор кричит: parse error
aaarrr
Цитата(Хомячог @ 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, 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
Я бы тоже закричал. Присваивать целое указателю нельзя. А что вы хотели сделать этой записью?
yaghtn
Код
GPIO1->PD &= ~(1<<8);           // GPIO1.8 = 0, turn off LED
...
GPIO1->PD |= (1<<8);                // GPIO1.8 = 1, turn on LED


Вы уверены, что из ->PD можно читать?
Если нет, то подобная конструкция может в GCC не прокатить, хотя IAR её пережевывает нормально.
Сергей Борщ
Цитата(yaghtn @ Apr 4 2008, 11:44) *
Вы уверены, что из ->PD можно читать?
Да, уверен.
Цитата(yaghtn @ Apr 4 2008, 11:44) *
Если нет, то подобная конструкция может в GCC не прокатить, хотя IAR её пережевывает нормально.
Очень интересно. Какие именно свойства GCC заставляют его как-то по-особенному обрабатывать volatile const - переменную при доступе через указатель?
Хомячог
привожу сокращенный вариант файла содержащего структуры, где АРВ стандартная фишка, а 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 */
aaarrr
Цитата(Хомячог @ Apr 4 2008, 14:53) *
Код

#define nitrid        (buf1_base + 0)

#define'ом нужно пользоваться аккуратненько, ага.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.