diff --git a/os/hal/ports/SAMA/SAMA5D2x/sama_matrix.c b/os/hal/ports/SAMA/SAMA5D2x/sama_matrix.c index da6f6f340..c24f8a703 100644 --- a/os/hal/ports/SAMA/SAMA5D2x/sama_matrix.c +++ b/os/hal/ports/SAMA/SAMA5D2x/sama_matrix.c @@ -171,11 +171,14 @@ void mtxSetSlaveSplitAddr(Matrix *mtxp, uint8_t slaveID, mtxDisableWP(mtxp); uint8_t i = mask, j = 0; uint32_t value = 0; + uint32_t pmask = 0; for (i = 1; (i <= mask) && (j < 32); i <<= 1, j += 4) { - if (i & mask) + if (i & mask) { value |= areaSize << j; + pmask |= 0x0F << j; + } } - mtxp->MATRIX_SASSR[slaveID] = value; + mtxp->MATRIX_SASSR[slaveID] = (mtxp->MATRIX_SASSR[slaveID] & ~pmask) | value; mtxEnableWP(mtxp); } @@ -196,11 +199,14 @@ void mtxSetSlaveRegionSize(Matrix *mtxp, uint8_t slaveID, mtxDisableWP(mtxp); uint8_t i = mask, j = 0; uint32_t value = 0; + uint32_t pmask = 0; for (i = 1; (i <= mask) && (j < 32 ); i <<= 1, j += 4) { - if (i & mask) + if (i & mask) { value |= areaSize << j; + pmask |= 0x0F << j; + } } - mtxp->MATRIX_SRTSR[slaveID] = value; + mtxp->MATRIX_SRTSR[slaveID] = (mtxp->MATRIX_SRTSR[slaveID] & ~pmask) | value; mtxEnableWP(mtxp); }