MSC
[EM_Library]

Flash controller (MSC) peripheral API. More...

Collaboration diagram for MSC:

Defines

#define MSC_PROGRAM_TIMEOUT   10000000ul
 The timeout used while waiting for the flash to become ready after a write. This number indicates the number of iterations to perform before issuing a timeout.

Enumerations

enum  msc_Return_TypeDef {
  mscReturnOk = 0,
  mscReturnInvalidAddr = -1,
  mscReturnLocked = -2,
  mscReturnTimeOut = -3,
  mscReturnUnaligned = -4
}

Functions

void MSC_Deinit (void)
 Disables the flash controller for writing.
void MSC_Init (void)
 Enables the flash controller for writing.
__STATIC_INLINE void MSC_IntClear (uint32_t flags)
 Clear one or more pending MSC interrupts.
__STATIC_INLINE void MSC_IntDisable (uint32_t flags)
 Disable one or more MSC interrupts.
__STATIC_INLINE void MSC_IntEnable (uint32_t flags)
 Enable one or more MSC interrupts.
__STATIC_INLINE uint32_t MSC_IntGet (void)
 Get pending MSV interrupt flags.
__STATIC_INLINE void MSC_IntSet (uint32_t flags)
 Set one or more pending MSC interrupts from SW.
msc_Return_TypeDef MSC_WriteWord (uint32_t *address, void const *data, int numBytes)
 Writes a single word to flash memory. Data to write must be aligned to words and contain a number of bytes that is divisable by four.
msc_Return_TypeDef MSC_ErasePage (uint32_t *startAddress)
 Erases a page in flash memory.

Detailed Description

Flash controller (MSC) peripheral API.

Flash controller (MSC) Peripheral API.


Define Documentation

#define MSC_PROGRAM_TIMEOUT   10000000ul

The timeout used while waiting for the flash to become ready after a write. This number indicates the number of iterations to perform before issuing a timeout.

Note:
This timeout is set very large (in the order of 100x longer than necessary). This is to avoid any corner cases.

Definition at line 73 of file em_msc.h.

Referenced by MSC_ErasePage().


Enumeration Type Documentation

Return codes for writing/erasing the flash

Enumerator:
mscReturnOk 

Flash write/erase successful.

mscReturnInvalidAddr 

Invalid address. Write to an address that is not flash.

mscReturnLocked 

Flash address is locked.

mscReturnTimeOut 

Timeout while writing to flash.

mscReturnUnaligned 

Unaligned access to flash.

Definition at line 80 of file em_msc.h.


Function Documentation

void MSC_Deinit ( void   ) 

Disables the flash controller for writing.

Definition at line 140 of file em_msc.c.

msc_Return_TypeDef MSC_ErasePage ( uint32_t *  startAddress  ) 

Erases a page in flash memory.

Note:
This function MUST be executed from RAM. Failure to execute this portion of the code in RAM will result in a hardfault. For IAR, Rowley and Codesourcery this will be achieved automatically. For Keil uVision 4 you must define a section called "ram_code" and place this manually in your project's scatter file.
Parameters:
[in] startAddress Pointer to the flash page to erase. Must be aligned to beginning of page boundary.
Returns:
Returns the status of erase operation, msc_Return_TypeDef
 *   mscReturnOk - Operation completed successfully.
 *   mscReturnInvalidAddr - Operation tried to erase a non-flash area.
 *   mscReturnLocked - Operation tried to erase a locked area of the flash.
 *   mscReturnTimeOut - Operation timed out waiting for flash operation
 *       to complete.
 * 

Definition at line 436 of file em_msc.c.

References MSC_PROGRAM_TIMEOUT, mscReturnInvalidAddr, mscReturnLocked, mscReturnOk, and mscReturnTimeOut.

void MSC_Init ( void   ) 

Enables the flash controller for writing.

Note:
IMPORTANT: This function must be called before flash operations when AUXHFRCO clock has been changed from default 14MHz band.

Definition at line 95 of file em_msc.c.

References CMU_ClockFreqGet(), and cmuClock_AUX.

Here is the call graph for this function:

__STATIC_INLINE void MSC_IntClear ( uint32_t  flags  ) 

Clear one or more pending MSC interrupts.

Parameters:
[in] flags Pending MSC intterupt source to clear. Use a bitwise logic OR combination of valid interrupt flags for the MSC module (MSC_IF_nnn).

Definition at line 115 of file em_msc.h.

__STATIC_INLINE void MSC_IntDisable ( uint32_t  flags  ) 

Disable one or more MSC interrupts.

Parameters:
[in] flags MSC interrupt sources to disable. Use a bitwise logic OR combination of valid interrupt flags for the MSC module (MSC_IF_nnn).

Definition at line 128 of file em_msc.h.

__STATIC_INLINE void MSC_IntEnable ( uint32_t  flags  ) 

Enable one or more MSC interrupts.

Note:
Depending on the use, a pending interrupt may already be set prior to enabling the interrupt. Consider using MSC_IntClear() prior to enabling if such a pending interrupt should be ignored.
Parameters:
[in] flags MSC interrupt sources to enable. Use a bitwise logic OR combination of valid interrupt flags for the MSC module (MSC_IF_nnn).

Definition at line 147 of file em_msc.h.

__STATIC_INLINE uint32_t MSC_IntGet ( void   ) 

Get pending MSV interrupt flags.

Note:
The event bits are not cleared by the use of this function.
Returns:
MSC interrupt sources pending. A bitwise logic OR combination of valid interrupt flags for the MSC module (MSC_IF_nnn).

Definition at line 164 of file em_msc.h.

__STATIC_INLINE void MSC_IntSet ( uint32_t  flags  ) 

Set one or more pending MSC interrupts from SW.

Parameters:
[in] flags MSC interrupt sources to set to pending. Use a bitwise logic OR combination of valid interrupt flags for the MSC module (MSC_IF_nnn).

Definition at line 178 of file em_msc.h.

msc_Return_TypeDef MSC_WriteWord ( uint32_t *  address,
void const *  data,
int  numBytes 
)

Writes a single word to flash memory. Data to write must be aligned to words and contain a number of bytes that is divisable by four.

Note:
The flash must be erased prior to writing a new word. This function must be run from RAM. Failure to execute this portion of the code in RAM will result in a hardfault. For IAR, Rowley and Codesourcery this will be achieved automatically. For Keil uVision 4 you must define a section called "ram_code" and place this manually in your project's scatter file.
Parameters:
[in] address Pointer to the flash word to write to. Must be aligned to words.
[in] data Data to write to flash.
[in] numBytes Number of bytes to write from flash. NB: Must be divisable by four.
Returns:
Returns the status of the write operation, msc_Return_TypeDef
 *   flashReturnOk - Operation completed successfully.
 *   flashReturnInvalidAddr - Operation tried to erase a non-flash area.
 *   flashReturnLocked - Operation tried to erase a locked area of the flash.
 *   flashReturnTimeOut - Operation timed out waiting for flash operation
 *       to complete. Or the MSC timed out waiting for the software to write
 *       the next word into the DWORD register. This may happen, for instance,
 *       when an interrupt occurs during a flash burst write transaction. In
 *       order to prevent this situation, the user should call INT_Disable
 *       before MSC_WriteWord and INT_Enable after.
 * 

Definition at line 539 of file em_msc.c.

References mscReturnOk.