RM0440 Rev 4 467/2126
RM0440 CORDIC co-processor (CORDIC)
485
17 CORDIC co-processor (CORDIC)
17.1 CORDIC introduction
The CORDIC co-processor provides hardware acceleration of certain mathematical
functions (mainly trigonometric ones) commonly used in motor control, metering, signal
processing and many other applications.
It speeds up the calculation of these functions compared to a software implementation,
making it possible the use of a lower operating frequency, or freeing up processor cycles in
order to perform other tasks.
17.2 CORDIC main features
• 24-bit CORDIC rotation engine
• Circular and Hyperbolic modes
• Rotation and Vectoring modes
• Functions: sine, cosine, sinh, cosh, atan, atan2, atanh, modulus, square root, natural
logarithm
• Programmable precision
• Low latency AHB slave interface
• Results can be read as soon as ready, without polling or interrupt
• DMA read and write channels
• Multiple register read/write by DMA
17.3 CORDIC functional description
17.3.1 General description
The CORDIC is a cost-efficient successive approximation algorithm for evaluating
trigonometric and hyperbolic functions.
In trigonometric (circular) mode, the sine and cosine of an angle θ are determined by
rotating the unit vector [1, 0] through decreasing angles until the cumulative sum of the
rotation angles equals the input angle θ. The x and y cartesian components of the rotated
vector then correspond respectively to the cosine and sine of θ. Inversely, the angle of a
vector [x, y], corresponding to arctangent (y / x), is determined by rotating [x, y] through
successively decreasing angles to obtain the unit vector [1, 0]. The cumulative sum of the
rotation angles gives the angle of the original vector.
The CORDIC algorithm can also be used for calculating hyperbolic functions (sinh, cosh,
atanh), by replacing the successive circular rotations by steps along a hyperbole.
Other functions can be derived from the basic functions described above.
17.3.2 CORDIC functions
The first step when using the co-processor is to select the required function, by
programming the FUNC field of the CORDIC_CR register accordingly.