Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
30.12.2009, 20:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от Alexey_1811
|
на такую строку
PINSEL0 &= ~(1‹‹31);
Может я что не так делаю?
|
Да нормально все. Кейлом не пользуюсь, GCC варнингов не дает, что и неудивительно. Может это "недокрякнутость" так себя проявляет?
Код:
|
PINSEL0 &= ~(1‹‹31);
* E59F200C ldr r2, [pc, #+0x00C]
* E5923000 ldr r3, [r2]
* E3C33102 bic r3, r3, #0x80000000
* E5823000 str r3, [r2] |
А вообще интересный способ работы с этим регистром. Там для выбора переферийной функции группы по два бита. Сброс одного не дает однозначности.
|
|
|
|
30.12.2009, 22:26
|
|
Частый гость
Регистрация: 10.11.2006
Адрес: Київ
Сообщений: 34
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от kison
|
А вообще интересный способ работы с этим регистром. Там для выбора переферийной функции группы по два бита. Сброс одного не дает однозначности.
|
Да я вкурсе, просто PINSEL0 &= ~(1‹‹31); для примера привел.
Все конечно работает, но наличие варнинга бесит.
|
|
|
|
31.12.2009, 03:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от Alexey_1811
|
Почему Keil ругается:
warning: #61-D: integer operation result is out of range
на такую строку
PINSEL0 &= ~(1‹‹31);
Может я что не так делаю?
|
Наверно потому что в Си числа-константы считаются int по-умолчанию - т.е. 16 бит
Проверьте, наверно при сдвиге до 15 не будет ругаться и вот так наверно тоже
PINSEL0 &= ~( ((long)1)‹‹31);
Возможно и 1UL прокатит - это как в WinAVR приписывают тип к обозначению частоты кварца в Гц.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
31.12.2009, 04:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от avr123-nm-ru
|
Наверно потому что в Си числа-константы считаются int по-умолчанию - т.е. 16 бит
|
Вообще то int в С - не меньше 16 бит, а вовсе не равно. Хотя и тут есть исключения, на некоторых машинах int 8-мибитный.
Но на ARM платформе int имеет честные 32 бита.
У меня ГЦЦ прекрасно переваривает такие конструкции, и несмотря на включенные все предупреждения не ругается. Там какой то другой С?
Может кейлу не нравится, что со знаковой величиной работаем как с беззнаковой?
|
|
|
|
31.12.2009, 13:01
|
|
Частый гость
Регистрация: 10.11.2006
Адрес: Київ
Сообщений: 34
Сказал спасибо: 4
Сказали Спасибо 1 раз в 1 сообщении
|
Re: LPC2101, Keil и все вокруг этого
C PINSEL0 &= ~( ((long)1)‹‹31); тоже самое.
Ругается только когда я меняю 31 бит. Ну да ладно.
У меня другая проблема. Пробую прикрутить SD карточку через SPI интерфейс. Карточки инициализируется нормально, но при попытке прочитать любой сектор я получаю одни и теже данные. Данные, что интересно, берутся с SD но это середина какого то 3ххх
сектора.
Код ниже:
|
|
|
|
31.12.2009, 13:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от Alexey_1811
|
меня другая проблема. Пробую прикрутить SD карточку через SPI интерфейс.
|
Может просто взять FATFS? Там все работает сразу, протестирована тысячами человек, и это очень быстрая файловая система.
Я никогда в фате не ковырялся, брал творение Чана и н жалел об этом.
LFN там тоже уже поддерживаются.
|
|
|
|
31.12.2009, 14:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от kison
|
Может кейлу не нравится, что со знаковой величиной работаем как с беззнаковой ?
|
Наверняка. 31 как раз на знак приходится.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
07.01.2010, 04:15
|
|
Временная регистрация
Регистрация: 25.11.2009
Сообщений: 61
Сказал спасибо: 1
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
А так?
PINSEL0 &= ~( (unsigned long)(1‹‹31) );
|
|
|
|
08.01.2010, 23:16
|
|
Прописка
Регистрация: 11.07.2007
Сообщений: 127
Сказал спасибо: 8
Сказали Спасибо 24 раз(а) в 18 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Помогите с прерыванием. С RTC идет секундное перывание ,которое на цветном графическом дисплее рисует время.Процесс довольно длительный но меня вполне устраивает,проблема в другом , прерывание "срет" мусором по картинке. Я так понял что не сохраняется состояние регистров перед входом в прерывание,на асме PUSH POP а на Си Кейл как это делается?
Код:
|
unsigned char BCD[8];
void Time_lcd (void) __irq;
void Rtc_init (void)
{
//RTC_PREINT = 0x00000392; //Set RTC prescaler for 12.000Mhz Xtal
//RTC_PREFRAC = 0x00004380;
RTC_CIIR = 0x00000001; //Enable seconds counter interrupt
//RTC_AMR = 0x000000FE; //Enable seconds Alarm
RTC_CCR = 0x00000011;
VICVectAddr13 = (unsigned long)Time_lcd ;
VICVectCntl13 = 15;
VICIntEnable = 1 ‹‹ 13;
}
void Time_lcd (void) __irq
{
LCD_WriteString8("Time:\n",70,123,0xf0,0);
BinToDec(RTC_HOUR) ;
LCD_WriteStringM(BCD,100,123,0xff,0,2);
BinToDec(RTC_MIN) ;
LCD_WriteStringM(BCD,121,123,0xff,0,2);
LCD_WriteString8(".\n",115,123,0xff,0);
BinToDec(RTC_SEC) ;
LCD_WriteStringM(BCD,144,123,0xff,0,2);
LCD_WriteString8(".\n",136,123,0xff,0);
RTC_ILR = 0x00000003;
VICVectAddr = 0X00000000;
return ;
} |
|
|
|
|
08.01.2010, 23:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: LPC2101, Keil и все вокруг этого
Сообщение от yarunt
|
Я так понял что не сохраняется состояние регистров перед входом в прерывание,на асме PUSH POP а на Си Кейл как это делается?
|
Нет, дело явно в другом. Например в величине стека для режима IRQ. Раз в прерывании вызывается куча функций, что в общем то очень плохой стиль программирования, то надо и стек установить соответственно большой.
Или другие причины. Вообще вывод на индикатор должен быть через одну функцию-драйвер. Если это не так и во время процесса вывода придет прерывание, в котором есть свой вывод, то эффекты могут быть самыми разными и обычно неприятными Если это так и есть, то пересматривайте алгоритм работы программы.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:02.
|
|