Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Результаты опроса: Запуск "на коленке" часть 2. Что дальше будем обсмакивать?
RTC (часы реального времени) 119 11.41%
USB 540 51.77%
Базовые навыки работы с портами ввода-вывода 247 23.68%
АЦП 108 10.35%
ЦАП 29 2.78%
Голосовавшие: 1043. Вы ещё не голосовали в этом опросе

 
Опции темы
Непрочитано 14.09.2010, 10:11  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

У меня такой вот вопросик про ногодрыганье.
Для AVR-рок я писал так:

PORTC.5=1;

или так

PORTC.5=выражение;

Причем пин принимает логическое значение выражения(ноль=выключен, не ноль=включен). Для ARM мне пришлось написать так:

if(выражение)//if bit set
GPIO_IOSET=0x00000040;//P0.6
else
GPIO_IOCLR=0x00000040;

Конечно все работает, но что-то мне подсказывает что есть более простой и изящный метод переключения состояния пина.
Реклама:
uk8amk вне форума  
Непрочитано 15.09.2010, 09:21  
Snacker
Временная регистрация
 
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
Snacker на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

uk8amk, не понял вашей хитрости... Вы выставляете бит в единицу, если он итак в единице и в ноль, если он в нуле? Или что вы проверяете и зачем?
Я думаю, что
Код:
PORTC.5=1;
аналогично
Код:
GPIO_IOSET|=(1‹‹5);
Snacker вне форума  
Непрочитано 15.09.2010, 09:26  
Snacker
Временная регистрация
 
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
Snacker на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Сообщение от innovator_king Посмотреть сообщение
Скажите пожалуйста! Есть ли у кого примеры кодов для контроллеров TI LM3S9B96 и ему подобные. Желательно под IAR.
Зайдите на сайт тексаса и слейте оттуда, наверняка там все есть. К тому же есть CMSIS, который для всех кортексов M0, M3, M4.
Snacker вне форума  
Непрочитано 16.09.2010, 08:52  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Сообщение от Snacker Посмотреть сообщение
не понял вашей хитрости... Вы выставляете бит в единицу, если он итак в единице и в ноль, если он в нуле? Или что вы проверяете и зачем?
Да, наверно я не совсем понятно выразился. Попробую на примере.
Чтобы не было скучно ковырять ARM, я взял конкретную задачу - бегущую строку. На AVR я делал процедуру вывода на табло так:
PHP код:
        for(j=1;j65;j‹‹=1)
                {
                for(
i=0;iMATRIX_LEN;i++)
                        {
                        
PORTC.2=0;
                        
PORTC.0=VideoRAM[i] & j;//transmit bit
                        
PORTC.2=1;//shift bit
                        
};  
                
PORTC.1=1;//capture data into register
                
PORTB=j;//set output string
                
PORTC.1=0;
                
delay_us(100);//wait 
                
};         
        }; 
Этот кусок кода выводил в сдвиговые регистры со светодиодами по очереди строки длиной MATRIX_LEN из массива VideoRam[MATRIX_LEN](т.е. динамическая индикация).
На элемент массива VideoRAM[i] накладывается битовая маска j для выделения текущей строки, а затем результат операции "И" выводится на пин PORTC.0. Причем, если VideoRAM[i]&j==0 то PORTC.0=0, а если VideoRAM[i]&j!=0(например, 1, 20, 128 и т.д.), то PORTC.0=1.
Для ARM такой аналогии переключения бита порта подобрать не смог и пришлось сделать так:
PHP код:
for(i=0;i64;i++)//issue current string
                 
{
                 
GPIO_IOCLR=0x00000090;//clear SH_CP & ST_CP bits 
                 
if(video_ram[i] & str_cnt)//if bit set
                    
GPIO_IOSET=0x00000040;//P0.6
                 
else
                    
GPIO_IOCLR=0x00000040;
                 
asm("nop\n nop\n nop\n nop");
                 
GPIO_IOSET=0x00000010;//set SH_CP/clock signal
                 
asm("nop\n nop\n nop\n nop"); 
                 }; 
Так вот, мне показалось что менять состояние пина порта через if() не совсем разумно и хочу узнать как такую задачу решили бы более опытные ARM-щики.
uk8amk вне форума  
Непрочитано 16.09.2010, 10:44  
Snacker
Временная регистрация
 
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
Snacker на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

uk8amk, вообще-то вы в PORTC.0 выводили не 0 или 1, а 0 или 1/2/4/8/16/32/64. Не знаю, правда, что по этому поводу думал ваш компилятор, но логически это не совсем верно.
На сколько я помню, в IAR была реализована возможность обращения к отдельным битам в АРМах. Вообще, разработчики архитектуры ARM такой возможности не предусматривали, и самым правильным считается именно такие операции, когда для обнуления бита используется IOCLR, а для выставления IOSET. Была лазейка работать через IOPIN, правда я не в курсе может ее уже пофиксили.
Хотя тут по-любому получается структура с if-else, даже в вашем примере с AVR по идее должна быть. Или хотя бы что-то типа:
Код:
PORTC.0=(VideoRAM[i] & j)||0;

Последний раз редактировалось Snacker; 16.09.2010 в 10:49.
Snacker вне форума  
Непрочитано 17.09.2010, 10:13  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Snacker
Я работал в CodeVision и он этот код нормально проглатывал. Ну да ладно, видать чуда все равно не будет IOPIN и FIOPIN работают(по крайней мере в младших камнях LPC2000).

Тут я почитал аппнот Philips AN10404 Initialization code/hints for the LPC2000 family
Там сказано следующее:

Цитата:
5.1.2 Setting up Stack Pointers and Enabling Interrupts
While setting the stack pointer please note that the Flash programming routines use a
section of the on-chip SRAM. In-System Programming (ISP) uses the top 256 bytes and
In-Application Programming (IAP) uses the top 128 bytes of the on-chip SRAM. The
application stack should not overlap this area.
Про IAP я полностью согласен, ему нужен кусок RAM для накопления данных. А вот по поводу ISP мне не ясно. Написано что для ISP нужно освободить сверху 256 байт. Но какая ему разница если я например включаю ISP через bootloader, то до моей программы дело не доходит, мои стеки не инициализируются т.к. по ресету управление перехватывает загрузчик. Где я ошибаюсь и что недопонимаю?

Последний раз редактировалось uk8amk; 18.09.2010 в 09:51.
uk8amk вне форума  
Непрочитано 19.09.2010, 10:40  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Добрался я наконец до UART-а LPC2000. С передачиком модуля все ясно, а с приемником не понятно. Максимум что смог найти - это примеры кода, посылающие строку. Для приемника примеров нет, да и описание в UserManual LPC2101 немного запутанное. Мои вопросы:
1)При приеме байтов по заполению RXFIFO срабатывает прерывание RDA/данные, чтобы его очистить надо читать U0RBR, пока не снимется флаг RDA в U0LSR?
2)Написано что есть прерывание LSR/статус. Статус появляется немного позже чем RDA? Вот тут опять непонятно, для очистки прерывания надо читать идентификационный регистр U0IIR и/или статусный U0LSR?
3)Как правильно обрабатывать события приемника(например алгоритм приема символа)?
Будет отлично если есть образцовые куски кода на эту тему.
uk8amk вне форума  
Непрочитано 20.09.2010, 11:02  
Snacker
Временная регистрация
 
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
Snacker на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

uk8amk, вот тут code.bundle.lpc23xx.lpc24xx.uvision.zip есть примеры работы с LPC23xx/24xx. Попробуйте применить то, что там есть.
Snacker вне форума  
Сказали "Спасибо" Snacker
uk8amk (21.09.2010)
Непрочитано 20.09.2010, 11:33  
yarunt
Прописка
 
Регистрация: 11.07.2007
Сообщений: 127
Сказал спасибо: 8
Сказали Спасибо 24 раз(а) в 18 сообщении(ях)
yarunt на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Поделитесь примером работы периферийным драйвером LCD в lpc2478.
yarunt вне форума  
Непрочитано 20.09.2010, 14:28  
Snacker
Временная регистрация
 
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
Snacker на пути к лучшему
По умолчанию Re: Здравствуй, ARM. Запуск "на коленке"

Сообщение от yarunt Посмотреть сообщение
Поделитесь примером работы периферийным драйвером LCD в lpc2478.
Вот пример.
А тут и тут можно посмотреть какую-нибудь еще информацию.
Snacker вне форума  
Эти 2 пользователя(ей) сказали Спасибо Snacker за это сообщение:
L_0_R (20.09.2010), yarunt (22.09.2010)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 11:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot