We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
HW_UINT32 dtcm, itcm;HW_UINT32 enable_memory_sharing;#define HW_TCM_ENABLE 0x1#define HW_ITCM_SIZE_32K 6#define HW_DTCM_SIZE_16K 5 enable_memory_sharing = 0; __asm__ __volatile__("MRC p15, 0, %0, c9, c1, 0":"=r"(dtcm)); dtcm |= ( 0x10104000 | (HW_DTCM_SIZE_16K << 2) | HW_TCM_ENABLE ); __asm__ __volatile__("MCR p15, 0, %0, c9, c1, 0"::"r"(dtcm)); enable_memory_sharing |= AT91C_CCFG_DTCM_SIZE_16KB; __asm__ __volatile__("MRC p15, 0, %0, c9, c1, 1":"=r"(itcm)); itcm |= ( 0x10108000 | (HW_ITCM_SIZE_32K << 2) | HW_TCM_ENABLE ); __asm__ __volatile__("MCR p15, 0, %0, c9, c1, 1"::"r"(itcm)); enable_memory_sharing |= AT91C_CCFG_ITCM_SIZE_32KB; AT91C_BASE_CCFG->CCFG_TCMR = enable_memory_sharing;
Why do you use dtcm "|=" for the configuration. I'm not sure what the reset values of the TCM configuration registers are - but you are creating a new configuration rather than updating a new one. I think you can get rid of the MRC, do "dtcm =", rather than or'ing the new data with the old configuration.Same comment applies to the ITCM.