Other Parts Discussed in Thread: HALCOGEN
We are trying to use DMA with activated cache on a TMS570LC4357, within a FreeRTOS project. We configured a non-cachable region (region 15) at the end of RAM as explained in https://www.hackster.io/jancumps/hercules-configure-memory-cache-for-dma-0945cd, which is based on a solution coming from the TI forum. However the variables allocated in region 15 still seem to land in the cache, as the DMA sends empty data. If cache is deactivated, it works as expected.
In HalCoGen, in the MPU tab, there is a setting for FreeRTOS:
It looks like FreeRTOS always configures region 15. In the file os_portasm.asm generated by HalCoGen, the following code is found:
portRESTORE_CONTEXT .macro
LDR R0, pxCurrentTCBConst
LDR R0, [R0]
; task stack MPU region
mov r4, #12 ; Task Stack Region
add r12, r0, #4 ; poin to regions in TCB
ldmia r12!, {r1-r3}
mcr p15, #0, r4, c6, c2, #0 ; Select region
mcr p15, #0, r1, c6, c1, #0 ; Base Address
mcr p15, #0, r3, c6, c1, #4 ; Access Attributes
mcr p15, #0, r2, c6, c1, #2 ; Size and Enable
ldr r5, portMax_MPU_Region
mov r4, #13
; dynamic MPU per task
ldmia r12!, {r1-r3}
mcr p15, #0, r4, c6, c2, #0 ; Select region
mcr p15, #0, r1, c6, c1, #0 ; Base Address
mcr p15, #0, r3, c6, c1, #4 ; Access Attributes
mcr p15, #0, r2, c6, c1, #2 ; Size and Enable
add r4, r4, #1
cmp r4, r5
bne $ - 0x1C
portMax_MPU_Region .word 16 - 1
If we change to:
portRESTORE_CONTEXT .macro
LDR R0, pxCurrentTCBConst
LDR R0, [R0]
; task stack MPU region
mov r4, #11 ; Task Stack Region
add r12, r0, #4 ; poin to regions in TCB
ldmia r12!, {r1-r3}
mcr p15, #0, r4, c6, c2, #0 ; Select region
mcr p15, #0, r1, c6, c1, #0 ; Base Address
mcr p15, #0, r3, c6, c1, #4 ; Access Attributes
mcr p15, #0, r2, c6, c1, #2 ; Size and Enable
ldr r5, portMax_MPU_Region
mov r4, #12
; dynamic MPU per task
ldmia r12!, {r1-r3}
mcr p15, #0, r4, c6, c2, #0 ; Select region
mcr p15, #0, r1, c6, c1, #0 ; Base Address
mcr p15, #0, r3, c6, c1, #4 ; Access Attributes
mcr p15, #0, r2, c6, c1, #2 ; Size and Enable
add r4, r4, #1
cmp r4, r5
bne $ - 0x1C
portMax_MPU_Region .word 15 - 1
to prevent FreeRTOS from using region 15, the non-cachable region works as expected.
Is this a valid setup or should another setup be used to declare region 15 as non-cachable while using FreeRTOS?

