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

 
 
> SAM4S, Ничего не выходит
Грендайзер
сообщение Oct 14 2014, 18:01
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Здравствуйте всем! Попала в руки отлпдочная плата SAM4S-EK2 на базе контроллера ATSAM4SD32C. Ранее никогда не работал ни с ARM ни с Cortex ну и встрял. Немного работал с AVR так там всё элементарно... Надо что то - посмотрел в даташите необходимый регистр, записал в него что нужно и всё... А здесь.. смотрел в даташит, так там как будто Лев Толстой приложился столько букв sad.gif И хоть убей, не вижу как элементарно вывести единичку в порт?

Сообщение отредактировал Грендайзер - Oct 14 2014, 18:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Грендайзер
сообщение Aug 7 2015, 12:13
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Снова здравствуйте. Вообщем промучился ещё день но так и не пришёл к решению. Вопрос к гуру ARMов, правильно ли в моём коде происходит уход в прерывание. Написал простейшую программулину, которая генерит пилу на выходе ЦАП. Заметил интересную особенность когда просматривал дизасемблированный код. В одном из регистров (r3), действительно появляются значения пилы в процессе работы цикла в программе main. Однако при уходе в подпрограмму прерывания в него записывается какая то ерунда. В ЦАП же записывается содержимое регистра r2 в котором, в процессе основного цикла хранится значение размаха пилы, т.е. 3000, а при входе в подпрограмму прерывания в него записывается значением которым я инициировал переменную dout, т.е. 300. После же выхода из прерывания в регистр r3 возвращается значение dout на момент когда пришло прерывание, а в r2 3000, т.е. размах пилы. Приведу весь код и рисунки с дизассемблера.
CODE
#include "sam.h"

int dout = 300;

void DACC_Handler( void );

int main(void)
{

/* Initialize the SAM system */
SystemInit();

__enable_irq ();

// --------------- Enable Interrupts in NVIC ----------------------------
NVIC_EnableIRQ(DACC_IRQn);

//------------------- Disable Watchdog Timer ---------------------------
WDT -> WDT_MR = WDT_MR_WDDIS; // disable Watchdog Timer
//----------------------------------------------------------------------

//----------------- Switch to fast RC oscillator ----------------------
// Enable Fast RC oscillator but DO NOT switch to RC now
PMC-> CKGR_MOR |= (CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCRCEN);

// Wait the Fast RC to stabilize
while (!(PMC -> PMC_SR & PMC_SR_MOSCRCS)){};

// Change Fast RC oscillator frequency
PMC-> CKGR_MOR = (PMC-> CKGR_MOR & ~CKGR_MOR_MOSCRCF_Msk) | CKGR_MOR_KEY_PASSWD |
CKGR_MOR_MOSCRCF_4_MHz;

// Wait the Fast RC to stabilize
while (!(PMC-> PMC_SR & PMC_SR_MOSCRCS)){};

// Switch to Fast RC
PMC-> CKGR_MOR = (PMC -> CKGR_MOR & ~CKGR_MOR_MOSCSEL) | CKGR_MOR_KEY_PASSWD;
//---------------------------------------------------------------------------------------------------------------

//-------------------------- Switch to Main Clock ---------------------------------------------------------------
// Switch to Main Clock
PMC -> PMC_MCKR |= PMC_MCKR_CSS_MAIN_CLK;

// Wait the Fast RC to stabilize
while (!(PMC-> PMC_SR & PMC_SR_MOSCRCS)){};
//---------------------------------------------------------------------------------------------------------------

//-------------------------- PLLA enable ------------------------------------------------------------------------

// Number Wait States Required to Access the Embedded Flash Memory (page 366 and 1183 datasheet)
EFC0 -> EEFC_FMR = (EFC0 -> EEFC_FMR & ~EEFC_FMR_FWS_Msk) | EEFC_FMR_FWS(6);

// Always stop PLL first!
PMC-> CKGR_PLLAR = CKGR_PLLAR_ONE | CKGR_PLLAR_MULA(0);

// Adjustment of the Multiplier and Divider
PMC-> CKGR_PLLAR = CKGR_PLLAR_ONE | CKGR_PLLAR_MULA(24) | CKGR_PLLAR_DIVA(1) |
CKGR_PLLAR_PLLACOUNT(100) | PMC_MCKR_PLLADIV2;

// Wait the PLL Lock
while (!(PMC-> PMC_SR & PMC_SR_LOCKA)){};

// Switch to PLLA Clock
PMC -> PMC_MCKR = (PMC -> PMC_MCKR & ~PMC_MCKR_CSS_Msk) | PMC_MCKR_CSS_PLLA_CLK;

// Wait Master Clock is Ready
while(!(PMC -> PMC_SR & PMC_SR_MCKRDY)){};

// --------- Enables the corresponding peripheral clock ----------------
// ------------------------ Enable PIOA --------------------------------
PMC -> PMC_PCER0 = (1 << ID_PIOA);

// ---------------------- Enable DACC clock ----------------------------
PMC -> PMC_PCER0 = (1 << ID_DACC);
PMC -> PMC_PCER0 = (1 << ID_ADC);

// --------- Enable corresponding pins ---------------------------------
PIOA -> PIO_PER = PIO_PER_P19 | PIO_PER_P20;

// ---- Enable output corresponding pins in PORTA-----------------------
PIOA -> PIO_OER = PIO_OER_P19|PIO_OER_P20;


// -- DAC SET
// --------------------- DACC Software Reset ---------------------------
DACC -> DACC_CR = DACC_CR_SWRST;

// ----------------------- DACC Mode Register --------------------------
DACC -> DACC_MR = DACC_MR_WORD_HALF | DACC_MR_USER_SEL_CHANNEL1;

// ----------------------- Channel 1 Enable ----------------------------
DACC -> DACC_CHER = DACC_CHER_CH1;

// ------------------- End of conversion interrupt ---------------------
DACC -> DACC_IER = DACC_IER_TXRDY;

// ---------------------- Start of conversion --------------------------
//DACC -> DACC_CDR = DACC_CDR_DATA(dout);

while (1)
{
if (dout == 3000)
{dout = 0;}
else
{dout = dout + 100;}
}
return 0;
}

void DACC_Handler( void )
{
volatile int IRQ_sense = 0;
IRQ_sense = DACC -> DACC_ISR;
DACC -> DACC_CDR = DACC_CDR_DATA(dout);
return;
}


Сообщение отредактировал IgorKossak - Aug 7 2015, 16:09
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Грендайзер   SAM4S   Oct 14 2014, 18:01
- - Genadi Zawidowski   Вот посмотрите... Разберетесь? CODEvoid arm_hardw...   Oct 14 2014, 18:26
- - Leopoldius   Все зависит от того чем Вы предпочитаете пользоват...   Oct 14 2014, 18:29
- - Golikov A.   А еще надо не путать даташит и рефернс мануал. В о...   Oct 14 2014, 19:04
- - Leopoldius   О да, особенно СТМ этим страдает. У АТМЕЛ в этом п...   Oct 14 2014, 19:09
- - Грендайзер   ЦитатаВот посмотрите... Разберетесь? Честно говоря...   Oct 14 2014, 19:15
|- - Leopoldius   Цитата(Грендайзер @ Oct 14 2014, 22:15) А...   Oct 14 2014, 19:23
- - Грендайзер   ЦитатаЕсли есть опыт работы с другими МК, то я бы ...   Oct 14 2014, 19:52
- - Golikov A.   В АРМах не принято порты буквами называть. И на са...   Oct 15 2014, 05:15
- - Грендайзер   Нашёл в студии заголовочник "sam4sd32c.h...   Oct 15 2014, 06:49
|- - DmitryM   Цитата(Грендайзер @ Oct 15 2014, 10:01) Н...   Oct 15 2014, 06:52
|- - KnightIgor   Цитата(Грендайзер @ Oct 15 2014, 08:49) Н...   Oct 15 2014, 09:46
- - Golikov A.   обычно хорошим тоном бывает давать в заголовочном ...   Oct 15 2014, 08:14
- - Грендайзер   Фух, запустил внутренний "медленный" ква...   Oct 15 2014, 11:55
|- - KnightIgor   Цитата(Грендайзер @ Oct 15 2014, 13:55) K...   Oct 15 2014, 13:03
- - Leopoldius   По поводу студии и почему не работает PORTB в ваше...   Oct 15 2014, 12:17
- - Golikov A.   а я бы сказал что так делать не надо, по описанной...   Oct 15 2014, 12:50
|- - Leopoldius   Цитата(Golikov A. @ Oct 15 2014, 15:50) а...   Oct 15 2014, 13:00
- - Грендайзер   ЦитатаЭто самый короткий, прямой путь без сюрпризо...   Oct 15 2014, 13:39
- - Golikov A.   Правда как всегда по середине. Я всегда за то что...   Oct 15 2014, 14:17
- - Грендайзер   Здравствуйте! Продолжаю мучить ATSAM4S32C. Дош...   Jul 29 2015, 09:54
- - Obam   Формально да (но попробовать не запрещено), ЦАП бы...   Jul 29 2015, 10:13
- - Грендайзер   Всё ясно, спасибо. Хотя всёравно как то печально   Jul 29 2015, 10:17
- - Грендайзер   Всем доброго времени суток. Опять столкнулся с про...   Aug 5 2015, 10:10
- - Obam   Не грех посмотреть в сгенерённый код: куда dout та...   Aug 5 2015, 11:04
- - Грендайзер   ЦитатаНе грех посмотреть в сгенерённый код: куда d...   Aug 5 2015, 11:56
- - scifi   У вас шнурки развязались не код, а полный бардак. ...   Aug 5 2015, 12:13
- - Грендайзер   прошу прощения за ошибки допущенные при копировани...   Aug 5 2015, 12:40
|- - DmitryM   Цитата(Грендайзер @ Aug 5 2015, 16:40) пр...   Aug 5 2015, 13:43
- - Golikov A.   int din = 0; int dout = 0; вот это под volatile ...   Aug 5 2015, 12:55
- - Грендайзер   Цитатакакая там у вас битность ЦАП? не переполнитс...   Aug 5 2015, 13:14
|- - scifi   Цитата(Грендайзер @ Aug 5 2015, 16:14) И ...   Aug 5 2015, 13:30
- - RabidRabbit   А прерывания от АЦП с какой частотой следуют? Не т...   Aug 5 2015, 13:14
- - Golikov A.   возникло прерывание, а дальше? флаг наличия прерыв...   Aug 5 2015, 13:28
- - Грендайзер   RabidRabbit, а не всё ли равно, с какой частотой с...   Aug 5 2015, 14:46
|- - scifi   Цитата(Грендайзер @ Aug 5 2015, 17:46) Ла...   Aug 5 2015, 15:57
- - Грендайзер   ЦитатаИ ещё один вопрос: при этом у процессора воо...   Aug 5 2015, 17:08
|- - scifi   Цитата(Грендайзер @ Aug 5 2015, 20:08) Ск...   Aug 5 2015, 17:32
- - Грендайзер   ЦитатаПредставьте, что одна итерация "мигания...   Aug 5 2015, 18:01
|- - scifi   Цитата(Грендайзер @ Aug 5 2015, 21:01) Не...   Aug 5 2015, 18:04
- - Грендайзер   да... это до меня дошло... завтра попробую ещё раз...   Aug 5 2015, 19:01
- - Golikov A.   вам не кейз надо делать, потому что попав в одно с...   Aug 5 2015, 19:06
- - zltigo   Это не проблема ARM, а проблема того, что сие ника...   Aug 7 2015, 12:35
- - scifi   +100500, пила там точно не получится. Для начала н...   Aug 7 2015, 12:43
- - Грендайзер   Ну началось... Бог с ней с пилой... Мне не важно, ...   Aug 7 2015, 13:20
|- - zltigo   QUOTE (Грендайзер @ Aug 7 2015, 16:20) а ...   Aug 7 2015, 13:31
- - Грендайзер   ЦитатаВы свое 'n' и 'dout' как-бы ...   Aug 7 2015, 13:39
|- - scifi   Цитата(Грендайзер @ Aug 7 2015, 16:39) Ча...   Aug 7 2015, 13:45
|- - zltigo   QUOTE (Грендайзер @ Aug 7 2015, 16:39) Ча...   Aug 7 2015, 13:51
|- - RabidRabbit   Цитата(Грендайзер @ Aug 7 2015, 16:39) Ча...   Aug 10 2015, 06:25
- - Грендайзер   ЦитатаНу тогда так: не забыли приписать volatile к...   Aug 7 2015, 13:47
|- - scifi   Цитата(Грендайзер @ Aug 7 2015, 16:47) Не...   Aug 7 2015, 13:51
|- - zltigo   QUOTE (Грендайзер @ Aug 7 2015, 16:47) Не...   Aug 7 2015, 13:55
- - scifi   Кстати, а что надо-то? А то пока что и пила, котор...   Aug 7 2015, 13:58
- - Грендайзер   ЦитатаЧто на выходе получиться должно-то? Должно п...   Aug 7 2015, 14:11
|- - scifi   Цитата(Грендайзер @ Aug 7 2015, 17:11) Та...   Aug 7 2015, 14:14
- - Грендайзер   ЦитатаЛегко. Запретить прерывания на время проверк...   Aug 7 2015, 14:20
|- - scifi   Цитата(Грендайзер @ Aug 7 2015, 17:20) Пр...   Aug 7 2015, 15:46
- - Грендайзер   Имею некоторый негативный опыт запихивания изрядно...   Aug 7 2015, 17:18
|- - scifi   Цитата(Грендайзер @ Aug 7 2015, 20:18) Им...   Aug 7 2015, 19:22
- - Грендайзер   ЦитатаПардон, но вам до такого понимания как пешко...   Aug 10 2015, 05:51
- - Грендайзер   Вылезает. При выходе из прерывания, я его отключаю...   Aug 10 2015, 07:14
- - Грендайзер   Ну сейчас меня с гавн съедят, и всё же... Товарищ ...   Aug 11 2015, 11:38


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 01:40
Рейтинг@Mail.ru


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