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

 
 
> 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
 
Start new topic
Ответов
yaghtn
сообщение Apr 4 2008, 08:44
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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 Текстовая версия Сейчас: 11th August 2025 - 10:27
Рейтинг@Mail.ru


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