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

 
 
> at91sam7s256, ADC
D1ma
сообщение Aug 30 2009, 14:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-11-07
Пользователь №: 32 165



Здравствуйте.
У АЦП at91sam7s256 есть режим непрерывного преобразования?
Должен быть если к нему можно присоединить PDC.
У меня АЦП после запуска делает преобразования по каждому каналу и пишет в буфер PDC и останавливается. А надо, чтоб дальше в цикле преобразовывало.

Как включить режим непрерывного преобразования? Иначе, зачем ему PDC?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
D1ma
сообщение Aug 30 2009, 17:11
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-11-07
Пользователь №: 32 165



так понял режима непрерывного преобразования у ат91сам7і256 - нет

еще баг при смене канала преобразования какойто мусор литит в память а потом воще незапускается код где настрой ацп и смена линиї смтр. ниже
Код
void InitADC()
{
  InitTC0();

  // Enable peripheral clock    
  AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_ADC);    
  // Reset the controller
  AT91C_BASE_ADC->ADC_CR = AT91C_ADC_SWRST;
  // Write to the MR register
  AT91C_BASE_ADC->ADC_MR = 0;// Clear the register

  
  unsigned int prescal;//5MH
  unsigned int startup;//20µs
  unsigned int shtim;  //1667ns track and hold time
  prescal = (BOARD_MCK/(ADC_FREQ*2))-1;
  startup =11;//[(Startup Time * ADCClock)/8]-1 = [(20 10e-6 * 5000000)/8]-1 = 11,5
  shtim=6;    //(HoldTime * ADCClock)-1 = (1667 10e-9 * 5000000)-1 = 7.335
  AT91C_BASE_ADC->ADC_MR =  AT91C_ADC_TRGEN_DIS               | // Íàïèøèòå ê ðåãèñòðó Ã.
                            AT91C_ADC_LOWRES_10_BIT           |
                            AT91C_ADC_SLEEP_NORMAL_MODE       |
                            ((prescal<<8)&AT91C_ADC_PRESCAL)  |
                            ((startup<<16)&AT91C_ADC_STARTUP) |
                            ((shtim<<24)&AT91C_ADC_SHTIM);
  
  AT91C_BASE_ADC->ADC_CHDR =  AT91C_ADC_CH0 |
                              AT91C_ADC_CH1 |
                              AT91C_ADC_CH2 |
                              AT91C_ADC_CH3 |
                              AT91C_ADC_CH4 |
                              AT91C_ADC_CH5 |
                              AT91C_ADC_CH6 |
                              AT91C_ADC_CH7;

  AT91C_BASE_ADC->ADC_CHER =AT91C_ADC_CH5;
  AT91C_BASE_ADC->ADC_IDR=0xffffffff;
  //Seting PDC
  AT91C_BASE_ADC->ADC_PTCR=AT91C_PDC_RXTDIS|AT91C_PDC_TXTDIS;
  AT91C_BASE_ADC->ADC_RPR=(unsigned int)ADCbuf;
  AT91C_BASE_ADC->ADC_RCR=ADC_SIZE_BUF;

    
}
void StartADCSignal1()
{
    //ADC from line 1
    AT91C_BASE_ADC->ADC_CHDR =AT91C_ADC_CH5;
    AT91C_BASE_ADC->ADC_CHER =AT91C_ADC_CH4;
    TakesADC=true;
    AT91C_BASE_ADC->ADC_RPR=(unsigned int)ADCbuf;
    AT91C_BASE_ADC->ADC_RCR=ADC_SIZE_BUF;
    TC_Start(AT91C_BASE_TC0);
    while(TakesADC)
      AT91C_BASE_ADC->ADC_CR=AT91C_ADC_START;
    
}
void StartADCSignal2()
{
    //ADC from line 2
     AT91C_BASE_ADC->ADC_CHER =AT91C_ADC_CH5;
    AT91C_BASE_ADC->ADC_CHDR =AT91C_ADC_CH4;
     TakesADC=true;
    AT91C_BASE_ADC->ADC_RPR=(unsigned int)ADCbuf;
    AT91C_BASE_ADC->ADC_RCR=ADC_SIZE_BUF;
    TC_Start(AT91C_BASE_TC0);
    while(TakesADC)
      AT91C_BASE_ADC->ADC_CR=AT91C_ADC_START;
    
}



что скажете гуру?

Сообщение отредактировал D1ma - Aug 30 2009, 17:12
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 30 2009, 17:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(D1ma @ Aug 30 2009, 21:11) *
что скажете гуру?

Если не приведете код полностью, то ничего не скажу. И зачем таким способом переключать каналы, когда можно сразу разрешить оба?
Go to the top of the page
 
+Quote Post



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

 


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


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