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

 
 
 
Reply to this topicStart new topic
> пробьлема с DMA на msp430f1611, не запускается после стопа
-=Space=-
сообщение Oct 14 2010, 11:49
Сообщение #1


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

Группа: Свой
Сообщений: 105
Регистрация: 14-01-05
Из: Москва Зеленоград
Пользователь №: 1 962



Задача синхронизировать периодический сигнал ЦАП о опорному сигналу.
Хочу сделать так:
1. таймерА сконфигурирован на частоту 409600
2. по DMA передается 1024 точки в ЦАП по триггеру от Таймера А , результат на ЦАПе - синус 400 Гц
3. в прерывании от порта я останавливаю и запускаю DMA, получаем синхронизацию с опорой.

вот так это реализовано
Код
//---------------------------------------------------------------------------------------
void init_DMA(void)
{
    DMACTL0 = DMA0TSEL_1;        // запуск DMA от  CCR2 таймера А
    DMA0SA = (unsigned short)buf_DAC;    // Start block address
    DMA0DA = DAC12_0DAT_;                // Destination block address
    DMA0SZ = BUF_LENGTH;                // Block size    3,6864e6 = 400 * 9 * 1024
    DMA0CTL =
        DMADT_4 +                        // Одиночный перенос с повтором
        DMADSTINCR_0 +                    // Наззначение не инкрементируется
        DMASRCINCR_3 +                    // Источник инкрементируется
        0*DMADSTBYTE +                    // получатель слово
        0*DMASRCBYTE +                    // источник слово
        0*DMAIE;                        // не разрешаем прерывания
    DMA0CTL |=  DMAEN;
}
//---------------------------------------------------------------------------------------
void init_TimerA(void)
{                                                    //   2 - /4
    TACTL = 0;                       // сбрасываем региср управления
    TACTL = ID_0 + TASSEL_2 + TACLR;    // input divider: 0 - /1, тактирование SMCLK
            // Timer A counter clear  - сброс значения в таймере
    TACCTL0 = 0*CCIE;                // Capture/compare interrupt enable
    TACCR0 = 8;                        // Frequency = 409600 Hz = 1024*400
    TACCTL1 = OUTMOD_3;                // режим установки/сброса
    TACCR1 = 6;                        // на значении 6 установится , на 9 сбросится
    TACCTL2 = OUTMOD_3;                // режим установки/сброса
    TACCR2 = 4;                        // на значении 3 установится , на 9 сбросится


    TACTL |= MC_1;                    // Start Timer A in up mode
}

#pragma vector=PORT1_VECTOR
__interrupt void port1_int (void)
{
    LedOn();
    DMA0CTL &=  ~DMAEN;      // ReEnable DMA
    init_DMA();

    P1IFG = 0;
    LedOff();
}



проблема такая:
после
DMA0CTL &= ~DMAEN;
DMA0CTL |= DMAEN;

DMA не возобновляет работу, зависает.
бит DMAEN остается взведенным а передачи нет.
Что не так?

пробовал сбрасывать/устанавливать DMAEN отладчиком без прерываний
пробовал режим DMADT_0 - Одиночный перенос без повторов, тогда DMA срабатывает только один раз.


Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 14 2010, 12:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



C багой DMA9, описанной в Errata, случайно никакой связи нет?

Кстати
Цитата("User's Manual MSP430x1xx (Rev.E)")
When selecting the trigger, the trigger must not have already occurred, or the transfer will not take place. For example, if the TACCR2 CCIFG bit is selected as a trigger, and it is already set, no transfer will occur until the next time the TACCR2 CCIFG bit is set.


Сообщение отредактировал rezident - Oct 14 2010, 12:33
Go to the top of the page
 
+Quote Post
-=Space=-
сообщение Oct 14 2010, 13:35
Сообщение #3


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

Группа: Свой
Сообщений: 105
Регистрация: 14-01-05
Из: Москва Зеленоград
Пользователь №: 1 962



Да, действительно оно.
Сброс этого флага все решил
Код
    TACCTL2 &= ~CCIFG;


странно другое, я читал еррату,
но этого текста не видел
у меня
Цитата
DMA9 DMA Module
Function Corrupted MAB/MDB during DMA and TB IRQ at high frequency (SMCLK and MCLK
greater than 7 MHz) caused by IRQ chain

и это про другое

если можно ссылочку на ваш еррата


а, нашел, это в даташите.
(надо очень внимательно читать даташиты)
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 14 2010, 13:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(-=Space=- @ Oct 14 2010, 19:35) *
если можно ссылочку на ваш еррата
Ссылка на текущую версию errata в моем предыдущем сообщении. А цитата там вообще-то из юзергайда smile.gif Я же подписал специально, намекая на авторство цитаты.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 9th July 2025 - 05:00
Рейтинг@Mail.ru


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