Q:
How do you take the core out of reset on the ADSP-BF70x?
--------------
A:
Since BF70x is a single core processor, the core resetting itself is not recommended because once the core puts itself in reset there is no way the core can take itself out of reset. However with the use of DMA and TRU core can be taken out of reset state by programming the TRU in such a way that on user request MDMA is triggered and writes to the Core reset register to take the core out of reset.
The code attached here demonstrates this. The code does following:
- Core programs TRU such that the Core 0 System Interface Disable Acknowledge (C0_SI_DIS_ACK) is assigned to Core-Reset (RCU0_C0RST) slave trigger.
- PINT0 trigger(for PA_02, push-button on EZKIT) is assigned to master trigger for MDMA0
- MDMA descriptors are set up to de-assert the RCU’s reset request.
- Core programs disable request in RCU (RCU0_SIDIS.SI0) and then goes to IDLE.
- SVECT0 is loaded with the address of LED blink code in L2 memory
- As a result of this disable request, the Core completes any outstanding transactions on its interfaces and asserts the Core disable acknowledge. This is connected to the C0_SI_DIS_ACK master trigger of the TRU, and results in Core-Reset Slave trigger to be asserted. This results in the Core getting reset via the RCU. Core is in REST now.
- When user proesses the Push button 2, MDMA0 is triggered and core is taken out of reset.
- Having been reset, the Core begins executing from the address in SVECT0.