Jump to content

    
Sign in to follow this  
prst

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

Recommended Posts

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
....

нужно попробовать закачать 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

Edited by beaRTS

Share this post


Link to post
Share on other sites
beaRTS, спасибо большое! :)

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

отлично.

 

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this