реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC2294, Про регистры
Kaiser
сообщение Feb 12 2007, 17:55
Сообщение #1





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Здравствуйте, господа!
Такой вопрос: можно ли обращаться к 32-разрядным регистрам LPC22xx как к 4 отдельным байтам?
Например, регистры Tx данных модуля CAN1, если задать массив по абсолютному адресу:
unsigned char DataA[4] _at_ 0xE0044038;

то при дальнейшей записи в этот массив записывается только элемент DataA[0], то есть

DataA[0] = 0x11;
DataA[1] = 0x22;
DataA[2] = 0x33;
DataA[3] = 0x44;

далее в регистре по адресу 0xE0044038 записывается только значение 0х11 или вообще "левое" значение.
В Юзер Мануале на 2294 в разделе CAN ничего про это не сказано, а вот в разделе про VIC сказано, что к регистрам VIC можно обращаться только как к слову (нельзя читать или записывать 1 байт или 2 байта, то есть полуслово), это относиться и к регистрам CAN?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 13 2007, 00:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Естественно нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 13 2007, 17:51
Сообщение #3





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Блин, круто, но пожалуйста поподробнее, что вы имеете в виду: "Естественно нет"?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 13 2007, 21:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kaiser @ Feb 13 2007, 16:51) *
Блин, круто, но пожалуйста поподробнее, что вы имеете в виду: "Естественно нет"?

Даже не знаю как и обьяснить-то sad.gif Вы железки никогда не пробовали рисовать? Если да, то вопрос
почему - странный. Если нет, то:
1. железяка к которой можно одновременно обращатся, как 8-16-32 битной просто элементатно сложнее получается и без всякой на то надобноcти никто сие делать не будет.
Я лично за многие годы ни одного чудака сделавшего такую периферию не видел.
Для меня совершенно очевидно, и что и Ваша "надобность" совершенно необдуманная.
2. Дальше - имеем дело с 32bit контроллером - да он вообще с 8bit крайне ограниченный набор команд имеет - если и сделать 8bit шину, то трахаться он будет с обращениями мучительно.
3. Ну и третье - на периферийной шине вообще двух младших адресов нет smile.gif Даже массовая восьмибитовая периферия занимет в адресном пространстве по четыре байта.
И следует только возблагодарить филипсовцев, что они позволили по четыре байта зараз загружать
а не растягивать сие удовольствие работы с мееееедленной периферией на четыре обращения.
Не вижу ни малейших причин не взять из буфера сразу четыре байта (путсть даже среди них лишние окажутся) и одним движением положить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex03
сообщение Feb 14 2007, 08:09
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата
CAN CONTROLLERS
Each CAN Controller has a register structure similar to the Philips SJA1000 and the PeliCAN Library block, but the 8-bit registers of those devices have been combined in 32 bit words to allow simultaneous access in the ARM environment.

При желании конечно можно в этих словах усмотреть некоторую недоговорённость, типа прородитель 8-ми битный и прямо про неработоспособность 8-ми битного доступа не сказано, но ...

И ИМХО формировать/разбирать пакет желательно в памяти, а с периферией только быстро посылать/принимать. smile.gif
Go to the top of the page
 
+Quote Post
_basile
сообщение Feb 14 2007, 08:42
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 175
Регистрация: 18-01-06
Из: Москва
Пользователь №: 13 329



Цитата(Alex03 @ Feb 14 2007, 08:09) *
Цитата

CAN CONTROLLERS
Each CAN Controller has a register structure similar to the Philips SJA1000 and the PeliCAN Library block, but the 8-bit registers of those devices have been combined in 32 bit words to allow simultaneous access in the ARM environment.

При желании конечно можно в этих словах усмотреть некоторую недоговорённость, типа прородитель 8-ми битный и прямо про неработоспособность 8-ми битного доступа не сказано, но ...

И ИМХО формировать/разбирать пакет желательно в памяти, а с периферией только быстро посылать/принимать. smile.gif

Видимо, проще практически попробовать, что будет при обращении как к 8-битному регистру.
Если оно того так хочется.


--------------------
" Будут с водкою дебаты, отвечай : Нет ребяты-демократы, только чай ! "
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 15 2007, 07:07
Сообщение #7





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Спасибо всем откликнувшимся, особенно про "железки".
Было бы неплохо обращаться к каждому байту отдельно, но раз нельзя, тогда придётся городить огород, что-то типа:
C1TDA1 = (unsigned char)*data;
*data++;
C1TDA1 |= ((unsigned char)*data)<<8;
*data++;
C1TDA1 |= ((unsigned char)*data)<<16;
*data++;
C1TDA1 |= ((unsigned char)*data)<<24;

Ещё обнаружил следующий трабл: требуется отправить 4 сообщения подряд - с одного модуля CAN1 на скорости 1000 Мбит/с, с другого модуля CAN3 на скорости 125 кбит/с, при передаче с CAN1 всё проходит отлично, а модуль CAN3 передаёт 16 раз первое сообщение и виснет, хотя по программе оно должно отправиться только один раз. Функции обслуживания этих модулей одинаковые с поправкой на номер модуля, настройки сети корректные, потому что, если в модуле CAN3 поставить скорость 1000Мбит/с, то 4 сообщения передаются также корректно. В эратте нет никаких ошибок, которые бы могли повлиять эту ситуацию. Если кто сталкивался с такой проблемой, подскажите - на что надо обратить внимание? Перед передачей следующего сообщения проверяется флаг готовности передатчика, прерывания от передатчиков запрещены.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 15 2007, 07:28
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Kaiser @ Feb 15 2007, 09:07) *
Ещё обнаружил следующий трабл: требуется отправить 4 сообщения подряд - с одного модуля CAN1 на скорости 1000 Мбит/с, с другого модуля CAN3 на скорости 125 кбит/с, при передаче с CAN1 всё проходит отлично, а модуль CAN3 передаёт 16 раз первое сообщение и виснет,


А приемники в этом CAN сегменте есть? Они настроены на ту же скорость?


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
gladov
сообщение Feb 15 2007, 10:27
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(Kaiser @ Feb 15 2007, 07:07) *
Спасибо всем откликнувшимся, особенно про "железки".
Было бы неплохо обращаться к каждому байту отдельно, но раз нельзя, тогда придётся городить огород, что-то типа:
C1TDA1 = (unsigned char)*data;
*data++;
C1TDA1 |= ((unsigned char)*data)<<8;
*data++;
C1TDA1 |= ((unsigned char)*data)<<16;
*data++;
C1TDA1 |= ((unsigned char)*data)<<24;


Огород не нужен:

C1TDA1 = *(unsigned int *)data;
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Feb 15 2007, 18:22
Сообщение #10


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата
Огород не нужен:

C1TDA1 = *(unsigned int *)data;
Только с выравниванием для data поосторожней.

Сообщение отредактировал GetSmart - Feb 15 2007, 18:22


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 16 2007, 05:46
Сообщение #11





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Цитата(Andy Mozzhevilov @ Feb 15 2007, 09:28) *
Цитата(Kaiser @ Feb 15 2007, 09:07) *

Ещё обнаружил следующий трабл: требуется отправить 4 сообщения подряд - с одного модуля CAN1 на скорости 1000 Мбит/с, с другого модуля CAN3 на скорости 125 кбит/с, при передаче с CAN1 всё проходит отлично, а модуль CAN3 передаёт 16 раз первое сообщение и виснет,


А приемники в этом CAN сегменте есть? Они настроены на ту же скорость?


Если мне не изменяет память настройка скорости производиться через один регистр CxBTR и для приёмника и для передатчика. К тому же, если задействован только передатчик, то конфигурировать приёмник не требуется.

Цитата(gladov @ Feb 15 2007, 12:27) *
Цитата(Kaiser @ Feb 15 2007, 07:07) *

Спасибо всем откликнувшимся, особенно про "железки".
Было бы неплохо обращаться к каждому байту отдельно, но раз нельзя, тогда придётся городить огород, что-то типа:
C1TDA1 = (unsigned char)*data;
*data++;
C1TDA1 |= ((unsigned char)*data)<<8;
*data++;
C1TDA1 |= ((unsigned char)*data)<<16;
*data++;
C1TDA1 |= ((unsigned char)*data)<<24;


Огород не нужен:

C1TDA1 = *(unsigned int *)data;


Согласен с вами. Но у меня массив из 8 unsigned char, поэтому есть 2 пути - или собирать посылку сразу в регистры данных (как показано у меня), или собрать в какой-нибудь промежуточный регистр и переписать как показано у вас. В принципе с этим вопросом разобрались сообща, но вот может по второму вопросу есть какие-нибудь идеи. Почему на одной скорости всё ок, а на другой непонятка такая:-(.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 16 2007, 06:32
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Kaiser @ Feb 16 2007, 07:46) *
Цитата(Andy Mozzhevilov @ Feb 15 2007, 09:28) *

Цитата(Kaiser @ Feb 15 2007, 09:07) *

Ещё обнаружил следующий трабл: требуется отправить 4 сообщения подряд - с одного модуля CAN1 на скорости 1000 Мбит/с, с другого модуля CAN3 на скорости 125 кбит/с, при передаче с CAN1 всё проходит отлично, а модуль CAN3 передаёт 16 раз первое сообщение и виснет,


А приемники в этом CAN сегменте есть? Они настроены на ту же скорость?


Если мне не изменяет память настройка скорости производиться через один регистр CxBTR и для приёмника и для передатчика. К тому же, если задействован только передатчик, то конфигурировать приёмник не требуется.


Имеется ввиду, кто принимает передаваемые этим узлом CAN сообщения?


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 16 2007, 10:32
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kaiser @ Feb 16 2007, 04:46) *
Но у меня массив из 8 unsigned char, поэтому есть 2 пути - или собирать посылку сразу в регистры данных (как показано у меня), или собрать в какой-нибудь промежуточный регистр и переписать как показано у вас.

Показан был ПРАВИЛЬНЫЙ путь - кладете прямо из Вашего массива любого размера по четыре байта зараз. Где узрели в примере чего-то "промежуточное" а?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 17 2007, 06:07
Сообщение #14





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Если вы в вопросе подразумевали - есть ли на шине другой приёмник-устройство на 125 кбит/с - то да, есть другое устройство и даже их два, и я их точно не забываю переконфигурировать на соответствущую скорость.

Насчёт массивов и регистров - конечно ручками оно правильнее, но поначалу я предполагал, что за меня это сделает компилятор. Вот у Микрочипа dsPIC 16 разряный, но с помощью компилятора позволяет обращаться отдельно к полуслову (1 байт) и даже применимо побитное обращение. Ну раз уж такая петрушка, то будем переучиваться.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 17 2007, 10:52
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kaiser @ Feb 17 2007, 05:07) *
Насчёт массивов и регистров - конечно ручками оно правильнее, но поначалу я предполагал, что за меня это сделает компилятор. Вот у Микрочипа dsPIC 16 разряный, но с помощью компилятора позволяет обращаться отдельно к полуслову (1 байт) и даже применимо побитное обращение. Ну раз уж такая петрушка, то будем переучиваться.

Ничего Вы не поняли sad.gif
1. Компилятор это делает за Вас.
2. Память и периферия с точки зрения байтовых и битовых обращений есть две большие разницы и сваливать их в кучу sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 19 2007, 05:57
Сообщение #16





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Цитата(zltigo @ Feb 17 2007, 12:52) *
Ничего Вы не поняли sad.gif
1. Компилятор это делает за Вас.
2. Память и периферия с точки зрения байтовых и битовых обращений есть две большие разницы и сваливать их в кучу sad.gif


Давайте разберёмся вместе wink.gif.
Я хотел сказать, что модуль CAN в dsPICах 16-разрядный, но тем не менее там есть возможность обратиться к регистрам модуля CAN как к полуслову, так и побитно (это периферия, а не память). А у LPC надо делать по-другому.

А если я чего не понял, ну объясните, пожалуйста, чего я недопонимаю? smile.gif

Сообщение отредактировал Kaiser - Feb 19 2007, 05:59
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 19 2007, 08:31
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Kaiser @ Feb 17 2007, 08:07) *
Если вы в вопросе подразумевали - есть ли на шине другой приёмник-устройство на 125 кбит/с - то да, есть другое устройство и даже их два, и я их точно не забываю переконфигурировать на соответствущую скорость.

Я бы взял скоп и смотрел, для начала без приемников на шине. Посчитал бы реальную битовую скорость.
И потом не понятно, что вы подразумеваете под "виснет".


Цитата(Kaiser @ Feb 19 2007, 07:57) *
Давайте разберёмся вместе wink.gif.
Я хотел сказать, что модуль CAN в dsPICах 16-разрядный, но тем не менее там есть возможность обратиться к регистрам модуля CAN как к полуслову, так и побитно (это периферия, а не память). А у LPC надо делать по-другому.
А если я чего не понял, ну объясните, пожалуйста, чего я недопонимаю? smile.gif

Ну сделано в dsPIC так, а в LPC так (почему это выгоднее, уже объясняли).
Примите как данность, реализуйте драйвер для этото CAN контроллера с нужным API и забудте, как оно там обращается к этим регистрам.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 19 2007, 10:28
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Kaiser @ Feb 19 2007, 04:57) *
А если я чего не понял, ну объясните, пожалуйста, чего я недопонимаю? smile.gif

Недообъясняете - предыдущее письмо было:
Цитата
Вот у Микрочипа dsPIC 16 разряный, но с помощью компилятора позволяет обращаться отдельно к полуслову (1 байт) и даже применимо побитное обращение.

Всуе поминалаись не относящинся к делу разрядность контролера, компилятор. И вообще пробитное обращение - а что за каким-то хреном в CAN от микрочипа сделаны регистры для установк/сброса и отдельных битов с буфере передачи????


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 19 2007, 18:33
Сообщение #19





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Цитата(zltigo @ Feb 19 2007, 12:28) *
Всуе поминалаись не относящинся к делу разрядность контролера, компилятор. И вообще пробитное обращение - а что за каким-то хреном в CAN от микрочипа сделаны регистры для установк/сброса и отдельных битов с буфере передачи????


Блин, "ниасилил аффтар твою грамматику":(

Цитата(Andy Mozzhevilov @ Feb 19 2007, 10:31) *
Я бы взял скоп и смотрел, для начала без приемников на шине. Посчитал бы реальную битовую скорость.
И потом не понятно, что вы подразумеваете под "виснет".


Под "виснет" я подразумеваю, что LPC вообще после 16 передач одного и того же сообщения никак не реагирует ни на что. Дальше не изменяя текста программы меняю скорость с 125 на 1000 и всё работает как часы без зависонов и глюков. Завтра попробую без приёмников поюзать, а то уже 4 дня на больничном был, под руками LPC не было.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 20 2007, 07:36
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Kaiser @ Feb 19 2007, 20:33) *
Под "виснет" я подразумеваю, что LPC вообще после 16 передач одного и того же сообщения никак не реагирует ни на что.

Посмотрите, в какой-нибудь аборт сваливается, наверное.
По LR можно проследить, с какого адреса, ну а дальше ставить там брейкпоинты, и разбираться.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 20 2007, 17:50
Сообщение #21





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Цитата(Andy Mozzhevilov @ Feb 20 2007, 09:36) *
Цитата(Kaiser @ Feb 19 2007, 20:33) *

Под "виснет" я подразумеваю, что LPC вообще после 16 передач одного и того же сообщения никак не реагирует ни на что.

Посмотрите, в какой-нибудь аборт сваливается, наверное.
По LR можно проследить, с какого адреса, ну а дальше ставить там брейкпоинты, и разбираться.


Уффф, всё сегодня наконец-то со всем разобрался - и скорости нормально стали переключаться и с регистрами всё получилось пока лучше некуда. Огромное всем спасибо, пока вопросов нет ;-)
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Feb 21 2007, 06:46
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Kaiser @ Feb 20 2007, 19:50) *
Цитата(Andy Mozzhevilov @ Feb 20 2007, 09:36) *

Цитата(Kaiser @ Feb 19 2007, 20:33) *

Под "виснет" я подразумеваю, что LPC вообще после 16 передач одного и того же сообщения никак не реагирует ни на что.

Посмотрите, в какой-нибудь аборт сваливается, наверное.
По LR можно проследить, с какого адреса, ну а дальше ставить там брейкпоинты, и разбираться.


Уффф, всё сегодня наконец-то со всем разобрался - и скорости нормально стали переключаться и с регистрами всё получилось пока лучше некуда. Огромное всем спасибо, пока вопросов нет ;-)


Отчет в студию!
По крайней мере так принято, даже если он в стиле "сам был дурак".


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Kaiser
сообщение Feb 21 2007, 20:30
Сообщение #23





Группа: Новичок
Сообщений: 14
Регистрация: 11-01-07
Пользователь №: 24 336



Отчёт.
Насчёт регистров, попробовал как посоветовали - работает!
Хотя немного поковырявшись, заделал новый тип - структурка
typedef struct
{
unsigned long TFI;
unsigned long ID;
unsigned long Data[2];
} CAN_TxObj, *pCAN_TxObj;
и с ней изгаляюсь, получилось коротко и ясно.

Насчёт скоростей, во-первых, у меня монитор шины CAN фирмы IXXAT был настроен на скорость 125CIA, но 1 бит состоял из 16 квантов, а в LPC из 10 квантов - осциллографом посмотрел битовая скорость совпадала, но почему то сообщения передавались некорректно, изменил скорость на просто 125 в IXXAT - всё стало нормально. А во-вторых, у второго приёмника на шине CAN битовая скорость немного отличалась на единицы микросекунд (время 1 бита), и уже глючило. Выставил точно битовую скорость на втором приёмнике, и с ним работа наладилась.
Пока вот так.......
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01598 секунд с 7
ELECTRONIX ©2004-2016