

#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 a divider is used, 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 and restored using CP_SaveContext() and CP_RestoreContext(), respectively. Status of the divider is also automatically saved/restored when threads are switched.
Example: Restore the status of the divider.
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
2006/08/09 Added a description of the number of calculation cycles.
2005/03/08 Standardized the Japanese term for "interrupt."
2004/11/02 Corrected IO register address in Internal Operation.
2004/05/06 Changes to description as a result of making process thread-safe.
2004/03/31 Indicated that process is not thread-safe.
2004/01/09 Added content.
2003/12/01 Initial version.
CONFIDENTIAL