Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в Кейле задать битовые регистры
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Romanello
Раньше работал в IARe, но потом задолбал этот глючный компилер и стал работать в Кейле, но появилась проблема, если в иаре было можно вот так описать биты портов, то как это сделать в кейле не знаю


__IO_REG32_BIT(IO1PIN, 0xE0028010,__READ_WRITE,__gpio1_bits);
__IO_REG32_BIT(IO1SET, 0xE0028014,__READ_WRITE,__gpio1_bits);
__IO_REG32_BIT(IO1DIR, 0xE0028018,__READ_WRITE,__gpio1_bits);
__IO_REG32_BIT(IO1CLR, 0xE002801C,__WRITE ,__gpio1_bits);
ALexx
Делаю таким образом (выдержка из хидера )


// General Purpose Input/Output (GPIO)
#define IOPIN0 (*((volatile unsigned long *) 0xE0028000))
#define IOSET0 (*((volatile unsigned long *) 0xE0028004))
#define IODIR0 (*((volatile unsigned long *) 0xE0028008))
#define IOCLR0 (*((volatile unsigned long *) 0xE002800C))
#define IOPIN1 (*((volatile unsigned long *) 0xE0028010))
#define IOSET1 (*((volatile unsigned long *) 0xE0028014))
#define IODIR1 (*((volatile unsigned long *) 0xE0028018))
#define IOCLR1 (*((volatile unsigned long *) 0xE002801C))

// Bit manipulation macroses
#define _SetP0(BitNum) IOSET0|=(1<<(BitNum))
#define _SetP1(BitNum) IOSET1|=(1<<(BitNum))
#define _ClrP0(BitNum) IOCLR0|=(1<<(BitNum))
#define _ClrP1(BitNum) IOCLR1|=(1<<(BitNum))

// Mask Set/Clear macroses
#define _SetMaskP0(Mask) IOSET0|=Mask
#define _SetMaskP1(Mask) IOSET1|=Mask
#define _ClrMaskP0(Mask) IOCLR0|=Mask
#define _ClrMaskP1(Mask) IOCLR1|=Mask
Romanello
а как опросить бит порта, я раньше делал

#define __IO_REG32_BIT(IO1PIN,0xE0028010,__READ_WRITE,__gpio1_bits);


if (IO0PIN_bit.P0_10 == 0) { что то делаю}

а здесь как нужно делать?
defunct
Цитата(Romanello @ Feb 15 2006, 16:55) *
а здесь как нужно делать?

По аналогии с [1]..

#define _Pin(num) IOPIN0&(1 << num)

if (Pin( 10 )) {};
defunct
Цитата(Romanello @ Feb 15 2006, 14:05) *
Раньше работал в IARe, но потом задолбал этот глючный компилер и стал работать в Кейле


ЗЫ: А keil кстати тоже глючный.. пример кода, на котором keil клинит.

Код
typedef struct
{
  short w1;
  short w2;
} MyStruct;

MyStruct MyFunct(void)
{
  return 0;
}
Romanello
Спасибо за ответы.

Кстати иар глучнее чем кейл - если при компиляции или эмуляции программы выключилось питание или сбилась винда, то 95%, что проект будет запорот, причем открываешь его потом, а там вместо программы написан один значок - маленький квадратик и все писец - если не делал резервных копий, то пиши заново, я вот так помаялся во времена морозов, когда Чубайс играл рубильником и понял, что надо менять среду - теперь вот возникают проблемы, но зато программа не пропадает.
zltigo
Цитата(Romanello @ Feb 16 2006, 08:32) *
Кстати иар глучнее чем кейл - если при компиляции или эмуляции программы выключилось питание или сбилась винда, то 95%, что проект будет
...
и понял, что надо менять среду

1. Теперь это называется "глюки компилятора" :-(
2. Ну так смените "среду" а компилятор оставьте.
3. if (IO0PIN_bit.P0_10 == 0) { что то делаю}
такая IAR конструкция на чтение по крайней мере на чтение работает однозначно,
а на запись бита в порт - производится чтение перед записью, что НЕ ВСЕГДА НУЖНО.
Кроме того, какую функцию выполняет P0_10 надо помнить а зачем?
Опишите преред началом проекта функциональные названия битов-портов и все будет много
читабельнее и проще в сопровождении

#define BIT10 (1<<10)

#define P0_MDM_READY BIT10

if( !(IO0PIN & P0_MDM_READY) )
{
...
}
defunct
Цитата(Romanello @ Feb 16 2006, 08:32) *
когда Чубайс играл рубильником и понял, что надо менять среду - теперь вот возникают проблемы, но зато программа не пропадает.

Надо бы UPS ставить, чтобы проблем не вощникало..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.