19.01.2011, 20:09
|
|
Прохожий
Регистрация: 23.12.2008
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Здравствуй, ARM. Запуск "на коленке"
Добрался я наконец до UART-а LPC2000. С передачиком модуля все ясно, а с приемником не понятно. Максимум что смог найти - это примеры кода, посылающие строку. Для приемника примеров нет, да и описание в UserManual LPC2101 немного запутанное. Мои вопросы:
1)При приеме байтов по заполению RXFIFO срабатывает прерывание RDA/данные, чтобы его очистить надо читать U0RBR, пока не снимется флаг RDA в U0LSR?
2)Написано что есть прерывание LSR/статус. Статус появляется немного позже чем RDA? Вот тут опять непонятно, для очистки прерывания надо читать идентификационный регистр U0IIR и/или статусный U0LSR?
3)Как правильно обрабатывать события приемника(например алгоритм приема символа)?
Будет отлично если есть образцовые куски кода на эту тему.
|
|
|
|
19.01.2011, 23:40
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
я выкладывал уарт для филипсов, поглядите выше
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
20.01.2011, 13:47
|
|
Временная регистрация
Регистрация: 09.09.2009
Сообщений: 91
Сказал спасибо: 10
Сказали Спасибо 6 раз(а) в 4 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
В IAR есть хороший пример C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\examples\NXP\LPC24xx\IAR-LPC-2468\simple\UART
Сам по нему учился, и добавить еще несколько USART плевое дело
|
|
|
|
21.01.2011, 10:53
|
|
Прохожий
Регистрация: 21.03.2009
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Подскажите пожалуйста, работаю с TE-LPC2478LCD5.6, проблема с выводом изображений на дисплей. Имеется структура такого типа:
Код:
|
/* GIMP RGB C-Source image dump (Picture640x480RGB.c) */
const struct
{
unsigned int width;
unsigned int height;
unsigned int bytes_per_pixel; // 3:RGB, 4:RGBA
unsigned char pixel_data[640 * 480 * 3 + 1];
}
gimp_image[] = {
640, 480, 3,
"\4\0\0\6\7\2\2\14\4\0\10\0\0\4\0\1...
... |
не могу понять как пользоваться этой структурой для вывода картинок:
Код:
|
uint16_t *ptr = (uint16_t *)_lcd_buffer;
uint16_t *end = (uint16_t *)(_lcd_buffer + (640 * 480) * 2);
int i=0;
while(ptr ‹ end){
*ptr++ = gimp_image[i];
i++; |
Естественно ругается на *ptr++ = gimp_image[i];
Последний раз редактировалось AlexNS; 21.01.2011 в 12:07.
|
|
|
|
21.01.2011, 15:56
|
|
Прописка
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Код:
|
/* GIMP RGB C-Source image dump (Picture640x480RGB.c) */
const struct
{
unsigned int width;
unsigned int height;
unsigned int bytes_per_pixel; // 3:RGB, 4:RGBA
unsigned char pixel_data[640 * 480 * 3 + 1];
}
gimp_image[] = {
640, 480, 3,
"\4\0\0\6\7\2\2\14\4\0\10\0\0\4\0\1...
... |
Код:
|
uint16_t *ptr = (uint16_t *)_lcd_buffer;
uint16_t *end = (uint16_t *)(_lcd_buffer + (640 * 480) * 2);
int i=0;
while(ptr ‹ end){
*ptr++ = gimp_image[i];
i++; |
Цитата:
|
Естественно ругается на *ptr++ = gimp_image[i];
|
Код:
|
unsigned char *ptr = (unsigned char*)_lcd_buffer;
unsigned char*end = (unsigned char*)(_lcd_buffer + (640 * 480) * 2);
int i=0;
while(ptr ‹ end){
*ptr++ = gimp_image.pixel_data[i];
i++;
} |
Я так думаю.
Не уверен, что выведет картинку, но компилятор ругаться не должен.
|
|
|
|
25.01.2011, 02:02
|
|
Прохожий
Регистрация: 02.06.2010
Сообщений: 3
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Здраствуйте у меня есть плата MMnet1002 польская. Микроконтроллер At91Sam92g60. На борту стоит linux. Пытаюсь программировать таймер, но что-то не сильно получается. Примеры для lpc не годятся так как ОС не дает прямого доступа к памяти. Программирую устройства посредством отображения адресов в ОП.
Пример кода :
Тут я делаю маппинг таймера
AT91S_TC *tc_map(unsigned int tcbase)
{
int fd;
void *base;
AT91S_TC *tc;
off_t addr = tcbase;
if ((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) {
fprintf(stderr, "Cannot open /dev/mem.\n");
exit(EXIT_FAILURE);
}
fprintf(stderr, "/dev/mem opened.\n");
base =
mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
addr & ~MAP_MASK);
if (base == (void *) -1) {
fprintf(stderr, "Cannot open /dev/mem.\n");
exit(EXIT_FAILURE);
}
fprintf(stderr, "Memory mapped at address %p.\n", base);
tc = base + (addr & MAP_MASK);
return tc;
}
Тут инициализирую таймер:
unsigned int timer_init(AT91S_TC *tc,int channel)
{
// Timer1 Init
tc-›TC1.TC_CCR = TC_CLKDIS ; /* Disable the Clock Counter */
tc-›TC1.TC_IDR = 0xFFFFFFFF ;
unsigned int dummy = tc-›TC1.TC_SR ;
tc-›TC1.TC_CMR = TC_CLKS_MCK1024 |
TC_CPCTRG ;
tc-›TC1.TC_CCR = TC_CLKEN ; /* Enable the Clock counter */
tc-›TC1.TC_IER = TC_CPCS ; /* Validate the RC compare interrupt */
AIC_InitHandler(timer1_c_irq_handler);
tc-›TC1.TC_RC = 0xFBC5;
tc-›TC1.TC_CCR = TC_SWTRG ;
return dummy;
}
Также делаю маппинг aic
Дальше настраиваю AIC
void AIC_InitHandler(unsigned int timer1_asm_irq_handler)
{
aic=aic_map(AIC_BASE);
printf("handler=%d",timer1_asm_irq_handler);
aic-›AIC_IDCR = (1‹‹ AT91C_ID_TC1) ; /* Disable timer 1 interrupt at AIC level */
aic-›AIC_SVR[ AT91C_ID_TC1] = timer1_asm_irq_handler ; /* Set the TC1 IRQ handler address */
aic-›AIC_SMR[ AT91C_ID_TC1] = ( AIC_SRCTYPE_INT_LEVEL_SENSITIVE | 0x4 ); /* Set the trigg and priority for TC1 interrupt */
aic-›AIC_ICCR = (1‹‹ AT91C_ID_TC1) ; /* Clear the TC1 interrupt */
aic-›AIC_IECR = (1‹‹ AT91C_ID_TC1) ; /* Enable the TC1 interrupt */
}
Проверяю, вижу что таймер тикает(читаю регистр периодически), но не вызывает прерывания.
Тут я опустил описания констант. Их взял из хедеров openwrt.
И еще в одних хедерах Id таймера1 = 5, а в других это 18 бит установленный в '1', пробовал и так и так, но вс равно не работает.
Незнаю где я ошибся или чего не сделал. Помогите кто сможет.
Последний раз редактировалось const3; 25.01.2011 в 02:07.
|
|
|
|
27.01.2011, 18:12
|
|
Прохожий
Регистрация: 24.05.2010
Сообщений: 3
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от kison
|
Она и есть - нереальная. Хоть на асме, хоть на чем. Вывод в порт - 2 такта. Итого на период 2+2=4 такта. Такт 2142 - 60МГц. Максимальная частота, достижимая программно - 15МГц, а вовсе не 20. Для 20 нужно разогнать процессор и функции махания ножками перенести в ОЗУ. Но это уже совсем не асм
|
AT91SAM7S128 программно переключал на 192 МГц, прекрасно работает мигалка. Задача простая - дергать ножки с частотой 35 МГц с заданной скважностью и кратной этой частоте, но каким драйвером и ключем MOSFET (есть и такие) дальше дергать - спецы - подскажите ![Озадачен](images/smilies/icon_confused.gif) .
С уважением.
|
|
|
|
02.02.2011, 12:36
|
|
Прохожий
Регистрация: 02.02.2011
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от v2010
|
Отладочная плата на AT91SAM7S128. http://www.kosmodrom.com.ua/razrabotka/91sam7s64_db.php
Проект полностью на ассемблере типа "Hello World" - мигание светодиодов, может кому пригодится для быстрого старта на асме ![Улыбка](images/smilies/icon_smile.gif)
PS: интерсно, что никто не интересуется асмом, программирую только на нем и считаю - лучшим языком для профи есть Asembler, конечно, нужно знать и коверканные языки асма - типа СИ и пр. Не против СИ - но программирую на Pascal. Мое глубокое ИМХО
|
А на каком Паскале, если не секрет?
|
|
|
|
02.02.2011, 13:15
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Эту гадость брать категорически не советую. Плата сырая, важные вещи - упущены, сэкономлено на всем. Может по неосторожности превратится в кирпич, и джамперами вы ее не восстановите, прийдется подпаивать проводки к пинам TQFP корпуса.
Вообщем аппофеоз непродуманности, недоукомплектованности и бреда.
__________________
.
![](signaturepics/sigpic59615_7.gif)
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
08.02.2011, 12:10
|
|
Временная регистрация
Регистрация: 16.05.2007
Сообщений: 59
Сказал спасибо: 1
Сказали Спасибо 10 раз(а) в 9 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
alexgap, скажите, а не ожидается ли продолжение начатого?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:37.
|
|