kuk 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Я тут поглядел как устроен порты ввода вывода в lpc2294 и ужаснулся ктоже такое придумал это копец я хочу спросить про то как можно вывести какое то число в порт как я понял устанавливаются они записью 1 в IO0SET а сбрасываются записью 1 в IO0CLR а что касается чтение данных это вообще производится из регистра IOPIN так вот исходя из этого извращения вопрос как кто реализовывал запись и чтение данных в/из порта Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SimpleSoft 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Я тут поглядел как устроен порты ввода вывода в lpc2294 и ужаснулся ктоже такое придумал это копец я хочу спросить про то как можно вывести какое то число в порт как я понял устанавливаются они записью 1 в IO0SET а сбрасываются записью 1 в IO0CLR а что касается чтение данных это вообще производится из регистра IOPIN так вот исходя из этого извращения вопрос как кто реализовывал запись и чтение данных в/из порта // Запись в порт IO0DIR = 0xFFFFFFFF; //Все GPIO на вывод. IO0SET = (1<<n), где n-номер бита, который требуется установить. IO0CLR = (1<<n), где n-номер бита, который требуется сбросить. //Чтение из порта IO0DIR = 0x0; // Все GPIO на вход Value = IO0PIN; // Читаем состояние портов Очень даже удобно с SET и CLR сделано, по ходу программирования поймёшь. Просто надо изменить подход к программированию портов с 51го Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kuk 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Да побитно еще ничего ну я если нужно вывести например 8 битное число то ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SimpleSoft 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Да побитно еще ничего ну я если нужно вывести например 8 битное число то ??? // Запись в порт IO0DIR = 0xFFFFFFFF; //Все GPIO на вывод. IO0CLR = 0xFFFFFFFF; //Сбрасываем все биты IO0SET = 0x55; // Выводим в порт 0x55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asen 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Да а может можно как то записать в IAR например в 3 байт порта одно байтное число не двигая его в сторону старшего разряда много много раз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Да а может можно как то записать в IAR например в 3 байт порта одно байтное число не двигая его в сторону старшего разряда много много раз Ну так напишите IO0SET = (0x55 << 0x18), и ничего больше двигать не надо :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SimpleSoft 0 1 февраля, 2006 Опубликовано 1 февраля, 2006 · Жалоба Да а может можно как то записать в IAR например в 3 байт порта одно байтное число не двигая его в сторону старшего разряда много много раз Ну так напишите IO0SET = (0x55 << 0x18), и ничего больше двигать не надо :) Запись на asm:::: LDR R0, =0xE0028000 MOV R1, 0x55 MVN R2, 0x00 STR R2, [R0, #8] STR R2, [R0, #0xC] STR R1, [R0, #4] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба Да а может можно как то записать в IAR например в 3 байт порта одно байтное число не двигая его в сторону старшего разряда много много раз Я когда ознакомился с яром для авр и вообще с авр сначала не понял удобства конструкции типа PORT = (0x3 << 2) - PORT = 00001100, но потом очень понравилось. Компилятор вычисляет константы - в данном случае 00001100 и подставляет в качестве операнда. В яре и хедеры на это заточены. В карме мне очень не хватает таких хедеров, где все биты сфр таким образом прописаны. Народ если у кого есть такой хедер может поделитесь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SimpleSoft 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба Да а может можно как то записать в IAR например в 3 байт порта одно байтное число не двигая его в сторону старшего разряда много много раз Я когда ознакомился с яром для авр и вообще с авр сначала не понял удобства конструкции типа PORT = (0x3 << 2) - PORT = 00001100, но потом очень понравилось. Компилятор вычисляет константы - в данном случае 00001100 и подставляет в качестве операнда. В яре и хедеры на это заточены. В карме мне очень не хватает таких хедеров, где все биты сфр таким образом прописаны. Народ если у кого есть такой хедер может поделитесь? ИМХО. Проще на ассемблере изваять, темболее проще и удобнее ассемблера для процессоров я не встречал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба Да, действительно, ассемблер у армов замечательный и не сложный (как мне показалось). Но не хочется разбираться с тонкостями архитектуры, досконально вникать в режимы адресации или банально запоминать мнемонику. Хочеться сконцетрироваться на алгоритме цельного устройства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 2 февраля, 2006 Опубликовано 2 февраля, 2006 · Жалоба В карме мне очень не хватает таких хедеров, где все биты сфр таким образом прописаны. Народ если у кого есть такой хедер может поделитесь? Так возьмите красивые *.h из IAR. Какие проблемы. Ну разве убрать местами всунутую проверку на IARовский компилятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба Приветствую всех пользователей LPC2000 У меня первый опыт с этими МК в корпусе QFP-144. Изначально нужен был ШИМ. Написал программу в KEIL, всё скомпилировалось, залил во FLASH LPC через Philips Flash Utilit. Верификация проходит нормально, но после переключения Р0.14 из 0 в 1 и сброса ничего не происходит, на выводе Р0.7 ШИМа нет. Решил проверить работу порта, написал мигалку светодиодом на Р1.16 скомпилировал, залил... Сбрасываю - тишина. Что за ерунда то! Вот код: #include <LPC22xx.H> /* LPC21xx definitions */ void delay (unsigned int val) /* Delay function */ { unsigned int cnt; for (cnt = 0; cnt < val; cnt++); /* Delay */ } int main (void) { SCS |= 0; //GPIO port 0; 1 is accessed via APB addresses in a fashion //compatible with previous LCP2000 devices. IODIR1 |= (1<<16); // P1.16-output while (1) { IOSET1 |= 1<<16; /* Turn on LED */ //IOPIN1 |= 1<<16; delay(5000); /* Delay */ IOCLR1 |= (1<<16); /* Turn off LEDs */ //IOPIN1 &= ~(1<<16); delay(5000); } } файл .hex прикладываю. Буду очень благодарен за любые советы. led.hex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skripach 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба Выражение SCS |= 0; не имеет смысла. А так KEIL вроде умеет симулировать.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 10 minutes ago, skripach said: Выражение SCS |= 0; не имеет смысла. А так KEIL вроде умеет симулировать.. Да, согласен. Имелось в виду: SCS = 0; А в остальном то как? У меня не оценочная плата, а голая м/сх в контактирующем устройстве (кроватке). Я по подключению хотел спросить - надо ли задействовать выводы BOOT[1:0] и CS0? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 21 июля, 2023 Опубликовано 21 июля, 2023 · Жалоба 3 часа назад, MPetrovich сказал: Вот код: void delay (unsigned int val) /* Delay function */ { unsigned int cnt; for (cnt = 0; cnt < val; cnt++); /* Delay */ } не имеет смысла. 13 минут назад, MPetrovich сказал: надо ли задействовать выводы BOOT[1:0] Естественно. Почему не просили: "Надо ли подавать питание?" 3 часа назад, MPetrovich сказал: Буду очень благодарен за любые советы. Советую: прежде чем начинать программировать какой-то МК, прочитать на него мануал. Чего вы (как видно по "коду") не сделали. 3 часа назад, MPetrovich сказал: IOSET1 |= 1<<16; /* Turn on LED */ //IOPIN1 |= 1<<16; delay(5000); /* Delay */ IOCLR1 |= (1<<16); /* Turn off LEDs */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться