Перейти к содержанию
    

GPIO - TMS320F28335: GPxDAT vs (GPxSET/GPxCLEAR/GPxTOGGLE)

Чет не нашел аналогичного вопроса...

Что-то я совсем запутался, вот читаю даташит на TMS320F28335 и на стр 100, и запутался.

Ранее встречал описания что менять состояние на выходном пине можно только через GPxSET/GPxCLEAR/GPxTOGGLE.

Однако в схеме явно нарисовано что они все влияют на регистр GPxDAT в режиме latch.

Так вот вопрос - можно ли выводить данные прямо в GPxDAT, или всеже только через GPxSET/GPxCLEAR/GPxTOOGLE? :1111493779:

Ну или где почитать чтоб точно найти ответ, бросте плз ссылку/документ.

Заранее сенк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

....

нужно попробовать закачать SPRC530:C2833x/C2823x C/C++ Header Files and Peripheral Examples с техаса сайта ( ссылка ). Распаковать, установить инсталлятор. Он создаст папку в Диске С под названием tidcs. В этой папке лежат примеры по работе с периферией процессора, а так же Hadware Abstraction Layer файлы (заголовочные файлы и сорцы). там есть два примера:

C:\tidcs\c28\DSP2833x\v131\DSP2833x_examples\gpio_setup\

C:\tidcs\c28\DSP2833x\v131\DSP2833x_examples\gpio_toggle\ на всякий случай прикреплю эти два примера.

 

Думаю, следует их пошуршать. НУ а так, там есть еще примеры, так что и в них можно полезную информацию подчерпнуть.

 

Так вот вопрос - можно ли выводить данные прямо в GPxDAT, или всеже только через GPxSET/GPxCLEAR/GPxTOOGLE? :1111493779:

не поленился - глянул. Во втором примере есть ответ на Ваш вопрос:

void Gpio_example1(void)
{ 
  // Example 1:
   // Toggle I/Os using DATA registers

   for(;;)
   {   
       GpioDataRegs.GPADAT.all    =0xAAAAAAAA;
       GpioDataRegs.GPBDAT.all    =0x0000000A;                 
       
       delay_loop();

       GpioDataRegs.GPADAT.all    =0x55555555; 
       GpioDataRegs.GPBDAT.all    =0x00000005; 
    
       delay_loop();    
    }
}

void Gpio_example2(void)
{ 
   // Example 2:
   // Toggle I/Os using SET/CLEAR registers
   for(;;)
   {    
   
       GpioDataRegs.GPASET.all    =0xAAAAAAAA;
       GpioDataRegs.GPACLEAR.all  =0x55555555;
       
       GpioDataRegs.GPBSET.all    =0x0000000A;                 
       GpioDataRegs.GPBCLEAR.all  =0x00000005;                 
              
       delay_loop();

       GpioDataRegs.GPACLEAR.all    =0xAAAAAAAA;
       GpioDataRegs.GPASET.all      =0x55555555;
       
       GpioDataRegs.GPBCLEAR.all    =0x0000000A;                 
       GpioDataRegs.GPBSET.all      =0x00000005;                 
    
       delay_loop();    
   
    }
}

void Gpio_example3(void)
{ 
   // Example 2:
   // Toggle I/Os using TOGGLE registers

   // Set pins to a known state
   
      GpioDataRegs.GPASET.all    =0xAAAAAAAA;
      GpioDataRegs.GPACLEAR.all  =0x55555555;
       
      GpioDataRegs.GPBSET.all    =0x0000000A;                 
      GpioDataRegs.GPBCLEAR.all  =0x00000005;                    

   // Use TOGGLE registers to flip the state of
   // the pins. 
   // Any bit set to a 1 will flip state (toggle)
   // Any bit set to a 0 will not toggle.   

   for(;;)
   {    
      GpioDataRegs.GPATOGGLE.all =0xFFFFFFFF;
      GpioDataRegs.GPBTOGGLE.all =0x0000000F;                 
      delay_loop();
    }
}

DSP2833x_examples_Gpio.zip

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

beaRTS, спасибо большое! :)

Значит можно смело использовать DAT регистр для записи в порт с программы...

отлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

beaRTS, спасибо большое! :)

Значит можно смело использовать DAT регистр для записи в порт с программы...

отлично.

 

Фишка в том, что при записи в GPxDAT Вы можете изменить состояние других выходных сигналов, которые уже были изменены в другой процедуре, например, в обработке прерывания. Чтобы избежать "эффекта гонок", используются регистры GPxSET, GPxCLEAR, GPxTOGGLE. Нулевое значение соответствующего бита GPxSET, например, не меняет состояние выходного сигнала в ноль. Изменяет состояние выхода только "1": в GPxSET устанавливает высокий уровень, в GPxCLEAR устанавливает низкий уровень, а в GPxTOGGLE - переключает на противоположный.

Если у Вас нет конкурирующих участков кода, использующих этот же порт, или Вы точно знаете, какое значение должен иметь соответствующий выход порта в данный момент времени, то можно использовать одну команду записи в GPxDAT для установки всех значений, вместо двух (GPxSET и GPxCLEAR).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...