Advertisement
EdizonTN

Untitled

Jun 26th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.53 KB | None | 0 0
  1. void _Chip_GPIO_Wr_Conf_Pin (uint32_t Port, uint32_t Pin, uint8_t Reg_Idx, const _Chip_IO_Spec_t *Reg_Val)  // write to register Reg_Idx value Reg_Val
  2. {
  3.     uint32_t tmp = 0;
  4.     uint8_t Remap[_CHIP_GPIO_LAST_PIN+1] = _CHIP_IOCON_REMAP;
  5.    
  6.     // ToDo: switch ON Clock for IOCON via SYSAHBCLKCTR0
  7.     SYSCON->SYSAHBCLKCTRL0 |= SYSCON_SYSAHBCLKCTRL0_IOCON(1);                       // run IOCON
  8.    
  9.     SYSCON->SYSAHBCLKCTRL0 |= SYSCON_SYSAHBCLKCTRL0_SWM(1);                         // run SWM
  10.  
  11.  
  12.     tmp = *(&IOCON->PIO[Remap[(Port * 32) + Pin]]);                                 // read original value of the IOCON
  13.     tmp &= 0xffff0000;                                                              // clear lower 2 bytes
  14.     tmp |= Reg_Val->IOCON_Reg;                                                      // spodny - 0 byte nasav zadanou hodnotou
  15.    
  16.     IOCON->PIO[Remap[(Port * 32) + Pin]] = tmp;                                     // and write to IOCON
  17.  
  18.     uint8_t reg1 = Reg_Val->SWM_Reg;                                                // nacitaj prvu SWM hodnotu
  19.     uint8_t reg2 = Reg_Val->SWM_Pin;                                                // nacitaj druhu SWM hodnotu
  20.     if(reg2 == 0xff)                        // write to pinenable                   // ak je druha hodnota SWM = 0xff, zapisujeme do PIN_ENABLE registra
  21.     {
  22.         if ( reg1 != 0xff)                                                          // ak je neaktivny = 0xff, nerob nic
  23.             _Chip_SWM_EnableFixedPin ((uint8_t)reg1);                               // ak je pin aktivny - zapis hodnoty do LPC_SWM->PINENABLEx (nuluje zadany pin)
  24.     }
  25.     else                                    // pin movable
  26.     {
  27.         _Chip_SWM_MovablePinAssign((uint8_t) reg1, reg2);                           // premapovanie pinu z Reg_Val[2] na pin z Reg_Val[3]
  28.     }
  29.  
  30.     SYSCON->SYSAHBCLKCTRL0 &= ~SYSCON_SYSAHBCLKCTRL0_IOCON(1);                      // stop IOCON
  31.  
  32.     SYSCON->SYSAHBCLKCTRL0 &= ~SYSCON_SYSAHBCLKCTRL0_SWM(1);                        // stop SWM
  33.    
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement