#include <nitro/cp.h>void CP_SetDiv32_32( u32 numer, u32 denom );
void CP_SetDiv64_32( u64 numer, u32 denom );
void CP_SetDiv64_64( u64 numer, u64 denom ); | numer | Numerator of fraction. Represents dividend of division here. |
| denom | Denominator of fraction. Represents divisor of division here. |
None.
Sets parameters for division. Sets division mode first, and then stores dividend and divisor in each register. CP_SetDivImm* is used to store dividend and divisor.
There are three division modes as follows:
| Division Mode | Calculation | Results | Calculation Cycles | CPU Cycle Conversion |
|---|---|---|---|---|
| CP_DIV_32_32BIT_MODE | 32-bit divided by 32-bit | Quotient 32-bit, remainder 32-bit | 18 cycles | 36 cycles |
| CP_DIV_64_32BIT_MODE | 64-bit divided by 32-bit | Quotient 64-bit, remainder 32-bit | 34 cycles | 68 cycles |
| CP_DIV_64_64BIT_MODE | 64-bit divided by 64-bit | Quotient 64-bit, remainder 64-bit | 34 cycles | 68 cycles |
Set mode to CP_DIV_32_32BIT_MODE with CP_SetDiv32_32().
Set mode to CP_DIV_64_32BIT_MODE with CP_SetDiv64_32().
Set mode to CP_DIV_64_64BIT_MODE with CP_SetDiv64_64().
Caution: With the Divider, sometimes the value is overwritten in the interrupt. If the division parameters are set up and an interrupt occurs during division when using a divider, the original calculated result will be broken. Therefore, if you are using the divider in an interrupt, the status of the divider needs to be temporarily stored/restored using CP_SaveContext() and CP_RestoreContext().
The status of dividers is also automatically saved/restored when threads are switched.
Example: Restore the Divider status
intr_func( void ) { CPContext context; CP_SaveContext( &context ); CP_SetDiv32_32( 1000, 5 ); CP_WaitDiv(); result = CP_GetDivResult(); CP_RestoreContext( &context ); }
Stores values in DIVCNT(0x4000280), DIV_NUMER(0x4000290), and DIV_DENOM(0x4000298) of the IO register.
CP_SetDivImm*, CP_IsDivBusy, CP_WaitDiv, CP_GetDivResult*, CP_GetDivRemainder*, CP_SaveContext, CP_RestoreContext
08/09/2006 Added a description of the number of calculation cycles.
03/08/2005 Standardized the Japanese term for "interrupt."
11/02/2004 Corrected IO register address in Internal Operation.
05/06/2004 Changes to description as a result of making process thread-safe.
03/31/2004 Indicated that process is not thread-safe.
01/09/2004 Added content.
12/01/2003 Initial version.
CONFIDENTIAL