Кто любит RISC в жизни, заходим, не стесняемся.
Вт фев 14, 2012 14:43:35
IfoR писал(а)::facepalm:
Да что же вы сразу меня в эту надпись не тыкнули? Я то думал оно АЦП питает. Не заметил я этого.
Теперь всё заработало. Спасибо!
Зачем додумать то, что явно написано ?
Теперь ты осознаешь, что все эти твои страдания от того, что надо было реально 2-3 странички из выложенного мной документа прочитать ?
Почитай хотя бы этот документ от и до. 28 страниц, включая содержание и ссылки, уже от кучи глупостей и непониманий избавит.
Пт фев 24, 2012 09:41:01
Ну вот начал изучать stm32 + MMC + FatFs. В принципе все заработало. В примерах подключения карты часто используется программный SPI. При работе на частоте 24 МГц получается скорость SPI около 1 Мбита. Захотелось перевести на аппаратный SPI2, но при этом карта инициализируется на скорости до 125 кбит. Быстрее-вылазит ошибка. Вот кусочек инициализации и чтения /записи.
- Код:
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; //подать тактирование /
SPI2->CR1 = 0x0000; //очистить первый управляющий регистр
SPI2->CR2 = 0x0000; //очистить второй управляющий регистр
SPI2->CR1 |= SPI_CR1_MSTR; //контроллер должен быть мастером
SPI2->CR1 |= 0x30; //задаем скорость 30=8*4мкс
SPI2->CR1 |= SPI_CR1_SPE; //разрешить работу модуля SPI
- Код:
void xmit_spi(unsigned char data)
{/*
unsigned char i;
for (i=0;i<8;i++) //Цикл перебора битов отправляемого байта
{
if ((data&0x80)==0x00)//Если все данные переданы
{
GPIOB->ODR &=~0x0001; //Выставить бит данных
}
else GPIOB->ODR|=0x0001;
data=data<<1;
GPIOB->ODR|=0x0004; //Импульс
GPIOB->ODR&=~0x0004;
}
*/
while (SPI2->SR & SPI_SR_BSY);
while (!(SPI2->SR & SPI_SR_TXE));
SPI2->DR = data; // Передача данных
}
- Код:
static
BYTE rcvr_spi (void)
{ /*
//Декларация переменных
unsigned char i, res=0;
for(i=0;i<8;i++)
{
GPIOB->ODR|=0x0004; //Фронт импульса
res=res<<1;
if ((GPIOB->IDR&0x0002)!=0x00) res=res|0x01; //Считать бит данных
GPIOB->ODR&=~0x0004; //Спад испульса
}
*/
while (SPI2->SR & SPI_SR_BSY);
SPI2->DR = 0xff;
while (!(SPI2->SR & SPI_SR_RXNE));
res = SPI2->SR;
res = SPI2->DR;
return res ;
}
закомментирован программный SPI. Подскажите где может быть ошибка?
Пт фев 24, 2012 10:29:54
А чем STM32 Peripheral library не угодил ?
Ср фев 29, 2012 01:15:10
Господа, а кто-нибудь использовал
FreeRTOS в своих проектах?
Если таковые люди имеются, я попросил бы, если не сложно, разъяснить мне один момент по поводу приоритетов задач. У Курница я вычитал следующую вещь:
- Код:
Среди всех задач, находящихся в состоянии готовности, планировщик отдаст управление той задаче, которая имеет наивысший приоритет. Задача будет выполняться до rex пор, пока она не будет блокирована или приостановлена или пока не появится готовая к выполнению задача с более высоким приоритетом.
Таким образом, не значит ли это, что если я имею две задачи (скажем, светодиодные те же мигалки - пусть будут синяя и красная) с одинаковым приоритетом (пусть tskIDLE_PRIORITY=0), и вдруг установлю приоритет первой задачи равным (tskIDLE_PRIORITY+1), то выполняться будет только лишь эта самая первая задача - вплоть до принудительной приостановки или понижения приоритета? А вторая задача что - уйдет в суспенд?
Непонятен мне этот нюанс. Если так, то с приоритетами вообще становится опасно баловаться..
Ср фев 29, 2012 09:55:22
Это уж как ты задачу с высшим приоритетом организуешь
"пока она не будет блокирована или приостановлена"
Приостанволена - это ж не значит, что снаружи. Если ты вызвал внутри Sleep(), ожидание события или разблокировки мутекса - это и есть блокировка, по которой шедулер начинает выполнять менее приоритетные задачи до наступления события, ведущего к разблокировке
Ср фев 29, 2012 10:28:21
Спасибо, с блокировкой понятно.
А насчет организации задачи - имеется в виду, будет ли задача ожидать наступления какого-либо события (иное условие для блокировки), чтобы планировщик мог выделить процессорное время другим задачам? Скажем, если задача будет постоянно в состоянии готовности (те же шморгалки ведь не требуют наступления особых условий), и ее приоритет будет выше приоритетов других задач, то планировщик будет выделять время только ей?
Я просто запутался с приоритетами - считал, что задача с высшим по отношению к другим приоритетом будет выполняться первой (какой-то квант времени), а потом планировщик переключится на другую задачу..
Ср фев 29, 2012 10:32:00
SubDia писал(а):Я просто запутался с приоритетами - считал, что задача с высшим по отношению к другим приоритетом будет выполняться первой (какой-то квант времени), а потом планировщик переключится на другую задачу..
Будет время - конечно переключится -)))
Если будешь вместо Sleep пользовать конструкции типа for(volatile int i=0; i < 1000000; ++i) ; то проблемы будут -)))
Да и в FreeRTOS, насколько помню, есть разные настройки и режимы. Вплоть до выбора вытесняющая/добровольная многозадачность.
Ср фев 29, 2012 10:38:43
Satyr писал(а):Если будешь вместо Sleep пользовать конструкции типа for(volatile int i=0; i < 1000000; ++i) ; то проблемы будут -)))
Уже были.
Благодарю за ответ. Я пока только начал изучать эту ОС.
Пн мар 05, 2012 15:39:04
Satyr писал(а):Да и в FreeRTOS, насколько помню, есть разные настройки и режимы. Вплоть до выбора вытесняющая/добровольная многозадачность.
Все верно, добрел наконец-то до этого. У меня в конфиге политика планирования - преимущественная (configUSE_PREEMPTION=1), то есть всегда (постоянно) выполняется задача с наивысшим приоритетом, задачи с одинаковым приоритетом делят процессорное время.
На практике давно дошло, вот нашел и теоретическое подтверждение. =)
Ср мар 07, 2012 20:37:25
А у меня такой вопрос немного не в тему:
У STM32 есть регистры для атомарного управления битами в порту: BSRR и BRR. Первый может как устанавливать, так и сбрасывать биты, а второй только сбрасывать. Зачем тогда нужен BRR?
Ср мар 07, 2012 20:57:14
Sergi писал(а):Захотелось перевести на аппаратный SPI2, но при этом карта инициализируется на скорости до 125 кбит. Быстрее-вылазит ошибка.
Это так и должно быть, по спецификации SD-карт. Инициализация - на скорости 100..400КГц, потом можно переключать на бОльшую скорость (20МГц вроде).
Ср мар 07, 2012 21:01:01
IfoR писал(а):У STM32 есть регистры для атомарного управления битами в порту: BSRR и BRR. Первый может как устанавливать, так и сбрасывать биты, а второй только сбрасывать. Зачем тогда нужен BRR?
У них маска одного бита на одном и том же месте. То есть, сбросить бит номер N - BRR = 1<<N, установить - BSRR = 1<<N. Иногда это может быть удобно, не надо двигать маску туда-сюда.
Ср мар 07, 2012 21:04:27
А-а, понятно. Спасибо!
Вт авг 09, 2016 14:10:11
скачал описание на STM32F042xx.
почему тут нету не описания регистров и т.д. как на атмелы ?
http://www.farnell.com/datasheets/1886881.pdf
Вт авг 09, 2016 14:55:03
Регистры в Reference Manual, а не в даташите.
Вт авг 09, 2016 15:20:55
ага - щас. голяк.
а че бесплатных компиляторов под эти чипы нету ?
Вт авг 09, 2016 18:13:28
СЦБист писал(а):ага - щас. голяк.
Шутите?
http://www.st.com/resource/en/reference ... 031936.pdfСЦБист писал(а):а че бесплатных компиляторов под эти чипы нету ?
GCC.
В качестве бесплатной IDE можно использовать
EmBitz. Компилятор, отладчик в составе IDE и ничего больше скачивать не нужно.
Ср авг 10, 2016 11:19:01
а бесплатного компилятора от фирмы разработчика я как понял нету ?
что-то в той документации ни структур не черта нету (((((
где брать описание структур на конкретную периферию ?
Ср авг 10, 2016 11:49:32
Мурик писал(а):что-то в той документации ни структур не черта нету
Если Вы о stm32, то документация состоит из datasheet - описание электрических параметров и reference manual - описание периферии в том числе ее регистров. reference manual обычно один на все семейство в datasheet перечислено какая конкретно периферия есть в конкретном контроллере и на какие ноги она выведена.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.