Fixed wrong bit mask in Tiva pal driver.

This commit is contained in:
marcoveeneman 2015-02-26 21:09:10 +01:00
parent c17c2f6edf
commit 8a7ede5e0a
1 changed files with 37 additions and 35 deletions

View File

@ -249,9 +249,7 @@ void _pal_lld_init(const PALConfig *config)
*
* @notapi
*/
void _pal_lld_setgroupmode(ioportid_t port,
ioportmask_t mask,
iomode_t mode)
void _pal_lld_setgroupmode(ioportid_t port, ioportmask_t mask, iomode_t mode)
{
uint32_t dir = (mode & PAL_TIVA_DIR_MASK) >> 0;
uint32_t afsel = (mode & PAL_TIVA_AFSEL_MASK) >> 1;
@ -269,18 +267,20 @@ void _pal_lld_setgroupmode(ioportid_t port,
while(TRUE) {
uint32_t pctl_mask = (7 << (4 * bit));
uint32_t bit_mask = (1 << bit);
if ((mask & 1) != 0) {
port->DIR = (port->DIR & ~mask) | dir;
port->AFSEL = (port->AFSEL & ~mask) | afsel;
port->DR2R = (port->DR2R & ~mask) | dr2r;
port->DR4R = (port->DR4R & ~mask) | dr4r;
port->DR8R = (port->DR8R & ~mask) | dr8r;
port->ODR = (port->ODR & ~mask) | odr;
port->PUR = (port->PUR & ~mask) | pur;
port->PDR = (port->PDR & ~mask) | pdr;
port->SLR = (port->SLR & ~mask) | slr;
port->DEN = (port->DEN & ~mask) | den;
port->AMSEL = (port->AMSEL & ~mask) | amsel;
port->DIR = (port->DIR & ~bit_mask) | dir;
port->AFSEL = (port->AFSEL & ~bit_mask) | afsel;
port->DR2R = (port->DR2R & ~bit_mask) | dr2r;
port->DR4R = (port->DR4R & ~bit_mask) | dr4r;
port->DR8R = (port->DR8R & ~bit_mask) | dr8r;
port->ODR = (port->ODR & ~bit_mask) | odr;
port->PUR = (port->PUR & ~bit_mask) | pur;
port->PDR = (port->PDR & ~bit_mask) | pdr;
port->SLR = (port->SLR & ~bit_mask) | slr;
port->DEN = (port->DEN & ~bit_mask) | den;
port->AMSEL = (port->AMSEL & ~bit_mask) | amsel;
port->PCTL = (port->PCTL & ~pctl_mask) | pctl;
}
@ -288,6 +288,7 @@ void _pal_lld_setgroupmode(ioportid_t port,
if (!mask) {
return;
}
dir <<= 1;
afsel <<= 1;
dr2r <<= 1;
@ -300,6 +301,7 @@ void _pal_lld_setgroupmode(ioportid_t port,
den <<= 1;
amsel <<= 1;
pctl <<= 4;
bit++;
}
}