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

 
 
 
Reply to this topicStart new topic
> Периферия микроконтроллера и шина AMBA APB
Derek
сообщение Jun 17 2008, 06:35
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



Здравствуйте!
Проясните пожалуйста для меня такой вопрос. Мне необходимо сделать ШИМ, взаимодействующий с ядром по шине APB. Я не могу понять каким образом управлять периферическим блоком
в таком случае. Запись в командный регистр блока осуществляется всегда словом, а если мне необходимо установить только один бит регистра, как это делать? Как грамотно работать с блоком, когда нету двух отдельных шин: шины команд и шины данных?
Go to the top of the page
 
+Quote Post
-=Sergei=-
сообщение Jun 17 2008, 06:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Цитата(Derek @ Jun 17 2008, 10:35) *
Здравствуйте!
Проясните пожалуйста для меня такой вопрос. Мне необходимо сделать ШИМ, взаимодействующий с ядром по шине APB. Я не могу понять каким образом управлять периферическим блоком
в таком случае. Запись в командный регистр блока осуществляется всегда словом, а если мне необходимо установить только один бит регистра, как это делать? Как грамотно работать с блоком, когда нету двух отдельных шин: шины команд и шины данных?



Почитать спецификацию на AMBA AHB.
Почитать спецификации на ARM ядра и почитать про бит бандинг.

1. Запись всегда словом. Об этом надо сказать программисту, типа мол чувак, если ты хочешь поменять один бит, то будь добр, считай сначало содержимое регистра, измени бит который хочешь поменять и запиши все обратно на месте, это так называемый Read - Modify - Write цикл. Тут тоже есть хитрости, эелательно в этот регистр не выводить какие либо флаги, которые модифицируются по факту чтения или записи.

2. АРМ так же для упрошения и ускорения цикла Read - Modify - Write предлагает такой фокус как bit banding. Что это значит. Весь твой регистр закреплен например за адресом 0х10. Т.е. если ты записываешь в этот адрес значение, то оно будет зафиксировано в регистре. А для того что бы можифицировать только один бит, за каждым битом регистра закремпляется еще по одному адресу, например за битом 0 - 0х100, за 1 - 0х101, за 2 - 0х102 и так далее 31 - 0х120. Таким образом если происходит запись числа больше чем 0 в адрес 0х100, то бит 0 взведется, если число равное 0 то очистится. А остальные биты остануться не изменными. Если надо взвести бит 31, то по адресу 0х120 записываем 1, если очистить то 0.
Это кончно приводит к зачительному разростанию используемых адресов, но для АРМов с доступными гигабайтами ОЗУ и ПЗУ это в принципе в микроконтроллерах не проблема.

З.Ы. А от куда такой интерес к шине AMBA APB?
Go to the top of the page
 
+Quote Post
Derek
сообщение Jun 17 2008, 07:08
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



Цитата(-=Sergei=- @ Jun 17 2008, 10:47) *
Почитать спецификацию на AMBA AHB.
Почитать спецификации на ARM ядра и почитать про бит бандинг.

1. Запись всегда словом. Об этом надо сказать программисту, типа мол чувак, если ты хочешь поменять один бит, то будь добр, считай сначало содержимое регистра, измени бит который хочешь поменять и запиши все обратно на месте, это так называемый Read - Modify - Write цикл. Тут тоже есть хитрости, эелательно в этот регистр не выводить какие либо флаги, которые модифицируются по факту чтения или записи.

2. АРМ так же для упрошения и ускорения цикла Read - Modify - Write предлагает такой фокус как bit banding. Что это значит. Весь твой регистр закреплен например за адресом 0х10. Т.е. если ты записываешь в этот адрес значение, то оно будет зафиксировано в регистре. А для того что бы можифицировать только один бит, за каждым битом регистра закремпляется еще по одному адресу, например за битом 0 - 0х100, за 1 - 0х101, за 2 - 0х102 и так далее 31 - 0х120. Таким образом если происходит запись числа больше чем 0 в адрес 0х100, то бит 0 взведется, если число равное 0 то очистится. А остальные биты остануться не изменными. Если надо взвести бит 31, то по адресу 0х120 записываем 1, если очистить то 0.
Это кончно приводит к зачительному разростанию используемых адресов, но для АРМов с доступными гигабайтами ОЗУ и ПЗУ это в принципе в микроконтроллерах не проблема.

З.Ы. А от куда такой интерес к шине AMBA APB?



Ок, спасибо!
Мне тоже приходил в голову первый способ, но я решил, что он не корректный и думал есть иной вариант.
Второй вариант понятен с точки зрения программы, зная адрес каждого бита регистра , можно
легко установить или сбросить тот или иной бит. Но как это реализовать аппаратно. Ведь у нас есть только сигналы PSEL, PWRITE, PWDATA, PENABLE. Такая организация позволяет писать только словом. Даже если на мост приходит команда записать бит, как дальше идет сигнал? То есть, кроме тех 4 сигналов я могу на мост добавить еще несколько сигналов, которые позволят аппаратно реализовать поддержку команды работы с битом? Такие вопросы у меня возникли после прочтения ответа. До этого я просмотрел всю информацию по AMBA(скачал с сайта ARM), и изучил как строятся системы на ней. А вот в ядро ARM пока не влазил.
Откуда такой интерес? Все просто , у нашей фирмы заказ на периферийный блок, который взаимодействует с ядром ARM по APB. Так поставлена задача.
Вот еще вопрос: в спецификации на AMBA они не рекомендуют сажать регистры и периферические блоки на PCLK (APB), так как это приводит к резкому возрастанию потребляемой мощности. Почему такое ограничение именно на PCLK? Иной тактовый сигнал не вызовет скачка потребления? Запись в регистр я веду по фронту PENABLE.
Go to the top of the page
 
+Quote Post
-=Sergei=-
сообщение Jun 17 2008, 07:34
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Цитата(Derek @ Jun 17 2008, 11:08) *
Ок, спасибо!
Мне тоже приходил в голову первый способ, но я решил, что он не корректный и думал есть иной вариант.
Второй вариант понятен с точки зрения программы, зная адрес каждого бита регистра , можно
легко установить или сбросить тот или иной бит. Но как это реализовать аппаратно. Ведь у нас есть только сигналы PSEL, PWRITE, PWDATA, PENABLE. Такая организация позволяет писать только словом. Даже если на мост приходит команда записать бит, как дальше идет сигнал? То есть, кроме тех 4 сигналов я могу на мост добавить еще несколько сигналов, которые позволят аппаратно реализовать поддержку команды работы с битом? Такие вопросы у меня возникли после прочтения ответа. До этого я просмотрел всю информацию по AMBA(скачал с сайта ARM), и изучил как строятся системы на ней. А вот в ядро ARM пока не влазил.
Откуда такой интерес? Все просто , у нашей фирмы заказ на периферийный блок, который взаимодействует с ядром ARM по APB. Так поставлена задача.
Вот еще вопрос: в спецификации на AMBA они не рекомендуют сажать регистры и периферические блоки на PCLK (APB), так как это приводит к резкому возрастанию потребляемой мощности. Почему такое ограничение именно на PCLK? Иной тактовый сигнал не вызовет скачка потребления? Запись в регистр я веду по фронту PENABLE.


На APB шине вы про команды ничего не знаете, у вас есть только Чтение PWRITE = 0 и запись PWRITE = 1. О том что за команда в процессоре сейчас вам занть не к чему. К вам вообще может обращаться например контроллер DMA.

кроме PSEL, PWRITE, PWDATA, PENABLE есть еще PADDR ну и еще некоторые. Вот на PADDR и смотрите.

условно быстрый набросок, компилироваться не будет

reg [31:0] PWM_CNT;

always @(posedge PCLK)
if (PADDR == 0x10 & PSEL & PENABLE) PWM_CNT <= PWDATA;
else if (PADDR == 0x100 & PSEL & PENABLE) PWM_CNT[0] <= |PWDATA;
else if (PADDR == 0x101 & PSEL & PENABLE) PWM_CNT[1] <= |PWDATA;
else if (PADDR == 0x102 & PSEL & PENABLE) PWM_CNT[2] <= |PWDATA;
...
else if (PADDR == 0x120 & PSEL & PENABLE) PWM_CNT[31] <= |PWDATA;


т.е. если обращение по адресу 0х10, то записываем все слово, если по другим адресам то если нам записывают СЛОВО (32 бита) которое больше нуля, то мы взводим ОДИН бит, иначе очишаем бит.
Т.е. записи все равно словные, но модифицируется только один бит.

Все в ARM ведется по клокам. Про запрет записи по PCLK вам показалось, есть рекомендации по клок гейтингу, т.е. пропускать сигнал PCLK только в в том случае, если он дейтсвительно нужен. т.е. если у вас ваш контроллер PWM будет отключен, то PCLK надо за гейтить на входе, что бы он не ходил внутрь. Тут опять таки зависит от вашей концепции разработки, если у вас есть специальный блок генератора тактовых сингналов на весь кристалл, то гейтить надо там, если нет, то прям у себя, но опять таки, один бит, PWM_EN - который разрешает работу всему PWM должен быть доступен всегда. Имеено он гейтит PCLK внутри PWM. Вообщем то клок гейтинг это отдельный большой вопрос.

А фирма какая если не секрет ?
Go to the top of the page
 
+Quote Post
Derek
сообщение Jun 17 2008, 08:35
Сообщение #5





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



Цитата(-=Sergei=- @ Jun 17 2008, 11:34) *
На APB шине вы про команды ничего не знаете, у вас есть только Чтение PWRITE = 0 и запись PWRITE = 1. О том что за команда в процессоре сейчас вам занть не к чему. К вам вообще может обращаться например контроллер DMA.

...

А фирма какая если не секрет ?


Понял. Спасибо за конструкцию. Про то, что по адресу можно декодировать в том числе и бит я как-то не сообразил.
Я работаю в дизайн центре при институте в Зеленограде.
Go to the top of the page
 
+Quote Post
-=Sergei=-
сообщение Jun 17 2008, 08:46
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Цитата(Derek @ Jun 17 2008, 12:35) *
Понял. Спасибо за конструкцию. Про то, что по адресу можно декодировать в том числе и бит я как-то не сообразил.
Я работаю в дизайн центре при институте в Зеленограде.


Понятно.
Ладно успехов, если что обращайтесь, соседям всегда готовы помочь.
Go to the top of the page
 
+Quote Post
vmp
сообщение Jun 17 2008, 11:37
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Добавлю ещё один трюк, позаимствованный у Атмеловских АРМов.
Регистры, в которых требуется работа с отдельными битами, на шине представляются парой адресов. Запись 1 в соответствующем разряде первого регистра устанавливает бит, запись нуля - никак не действует. Запись 1 во второй регистр сбрасывает этот бит, ноль - ничего не меняет.
Для программистов такой подход очень удобен, поскольку позволяет атомарно менять биты, не связываясь с запрещением прерываний на время выполнения команд чтения-изменения-записи.
Подробности можно посмотреть в любом даташите, например на AT91SAM7S256.
Go to the top of the page
 
+Quote Post
Derek
сообщение Jun 17 2008, 12:53
Сообщение #8





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



Ок, буду обращаться и тоже помогать землякамsmile.gif Спасибо за консультацию -=Serqei=-, vmp.
Даташит почитаю обязательно, так как пока суть идеи уловил смутно.
Go to the top of the page
 
+Quote Post
romanKo
сообщение Jun 17 2008, 14:46
Сообщение #9





Группа: Новичок
Сообщений: 4
Регистрация: 21-08-07
Пользователь №: 29 939



А есть ли спецификация AMBA AHB , APB , AXI на русском языке ?
Go to the top of the page
 
+Quote Post
Derek
сообщение Jun 18 2008, 13:53
Сообщение #10





Группа: Новичок
Сообщений: 7
Регистрация: 16-06-08
Пользователь №: 38 330



Цитата(romanKo @ Jun 17 2008, 18:46) *
А есть ли спецификация AMBA AHB , APB , AXI на русском языке ?


Я искал на русском языке, но увы не нашел. Так что пришлось скачивать с оффициального сайта ARM
Go to the top of the page
 
+Quote Post
psL
сообщение Jun 18 2008, 19:33
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(romanKo @ Jun 17 2008, 18:46) *
А есть ли спецификация AMBA AHB , APB , AXI на русском языке ?

Описание AMBA на русском есть в книге Суворова Е. А., Шейнин Ю. Е. Проектирование цифровых систем на VHDL.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:56
Рейтинг@Mail.ru


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