Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- {
- uint32_t tmp = 0;
- uint8_t Remap[_CHIP_GPIO_LAST_PIN+1] = _CHIP_IOCON_REMAP;
- // ToDo: switch ON Clock for IOCON via SYSAHBCLKCTR0
- SYSCON->SYSAHBCLKCTRL0 |= SYSCON_SYSAHBCLKCTRL0_IOCON(1); // run IOCON
- SYSCON->SYSAHBCLKCTRL0 |= SYSCON_SYSAHBCLKCTRL0_SWM(1); // run SWM
- tmp = *(&IOCON->PIO[Remap[(Port * 32) + Pin]]); // read original value of the IOCON
- tmp &= 0xffff0000; // clear lower 2 bytes
- tmp |= Reg_Val->IOCON_Reg; // spodny - 0 byte nasav zadanou hodnotou
- IOCON->PIO[Remap[(Port * 32) + Pin]] = tmp; // and write to IOCON
- uint8_t reg1 = Reg_Val->SWM_Reg; // nacitaj prvu SWM hodnotu
- uint8_t reg2 = Reg_Val->SWM_Pin; // nacitaj druhu SWM hodnotu
- if(reg2 == 0xff) // write to pinenable // ak je druha hodnota SWM = 0xff, zapisujeme do PIN_ENABLE registra
- {
- if ( reg1 != 0xff) // ak je neaktivny = 0xff, nerob nic
- _Chip_SWM_EnableFixedPin ((uint8_t)reg1); // ak je pin aktivny - zapis hodnoty do LPC_SWM->PINENABLEx (nuluje zadany pin)
- }
- else // pin movable
- {
- _Chip_SWM_MovablePinAssign((uint8_t) reg1, reg2); // premapovanie pinu z Reg_Val[2] na pin z Reg_Val[3]
- }
- SYSCON->SYSAHBCLKCTRL0 &= ~SYSCON_SYSAHBCLKCTRL0_IOCON(1); // stop IOCON
- SYSCON->SYSAHBCLKCTRL0 &= ~SYSCON_SYSAHBCLKCTRL0_SWM(1); // stop SWM
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement