#include <stdio.h>
#include <stdint.h>
#define POLY_PWM_PERIOD (1500)
int main(void) {
// your code goes here
static int rate1 = 0;
static int32_t phaseAccumEL;
static int32_t phaseAccumAZ;
phaseAccumAZ = (127 << 25) | 0x3F;
int rate = rate1;
phaseAccumEL += rate;
uint32_t phase_accum_el_uint = phaseAccumEL;
const uint32_t accum_el_upper = phase_accum_el_uint >> 24;
const int32_t adjustEL = (int8_t)accum_el_upper;
phase_accum_el_uint &= (1 << 24) - 1;
phaseAccumEL = phase_accum_el_uint;
uint32_t PWM_CPRDUPD1 = POLY_PWM_PERIOD - adjustEL;
phaseAccumAZ += rate;
uint32_t phase_accum_az_uint = phaseAccumAZ;
const uint32_t accum_az_upper = phase_accum_az_uint >> 25;
// Extract the upper bits and wrap them around to the range [-64, 63].
int32_t adjustAZ = accum_az_upper & 0x7F; // Mask to 7 bits (0-127)
if (adjustAZ >= 64)
{
adjustAZ -= 128; // Wrap around to negative range if >= 64
}
phase_accum_az_uint &= (1 << 25) - 1;
phaseAccumAZ = phase_accum_az_uint;
uint32_t PWM_CPRDUPD0 = (POLY_PWM_PERIOD / 2) - adjustAZ;
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCiNkZWZpbmUgUE9MWV9QV01fUEVSSU9EICgxNTAwKQoKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJc3RhdGljIGludCByYXRlMSA9IDA7CglzdGF0aWMgaW50MzJfdCBwaGFzZUFjY3VtRUw7CglzdGF0aWMgaW50MzJfdCBwaGFzZUFjY3VtQVo7CglwaGFzZUFjY3VtQVogPSAoMTI3IDw8IDI1KSB8IDB4M0Y7CiAgICBpbnQgcmF0ZSA9IHJhdGUxOwogICAgcGhhc2VBY2N1bUVMICs9IHJhdGU7CiAgICB1aW50MzJfdCBwaGFzZV9hY2N1bV9lbF91aW50ID0gcGhhc2VBY2N1bUVMOwogICAgY29uc3QgdWludDMyX3QgYWNjdW1fZWxfdXBwZXIgPSBwaGFzZV9hY2N1bV9lbF91aW50ID4+IDI0OwogICAgY29uc3QgaW50MzJfdCBhZGp1c3RFTCA9IChpbnQ4X3QpYWNjdW1fZWxfdXBwZXI7CiAgICBwaGFzZV9hY2N1bV9lbF91aW50ICY9ICgxIDw8IDI0KSAtIDE7CiAgICBwaGFzZUFjY3VtRUwgPSBwaGFzZV9hY2N1bV9lbF91aW50OwogICAgdWludDMyX3QgUFdNX0NQUkRVUEQxID0gUE9MWV9QV01fUEVSSU9EIC0gYWRqdXN0RUw7CgogICAgcGhhc2VBY2N1bUFaICs9IHJhdGU7CiAgICB1aW50MzJfdCBwaGFzZV9hY2N1bV9hel91aW50ID0gcGhhc2VBY2N1bUFaOwogICAgY29uc3QgdWludDMyX3QgYWNjdW1fYXpfdXBwZXIgPSBwaGFzZV9hY2N1bV9hel91aW50ID4+IDI1OwogICAgLy8gRXh0cmFjdCB0aGUgdXBwZXIgYml0cyBhbmQgd3JhcCB0aGVtIGFyb3VuZCB0byB0aGUgcmFuZ2UgWy02NCwgNjNdLgogICAgaW50MzJfdCBhZGp1c3RBWiA9IGFjY3VtX2F6X3VwcGVyICYgMHg3RjsgLy8gTWFzayB0byA3IGJpdHMgKDAtMTI3KQogICAgaWYgKGFkanVzdEFaID49IDY0KQogICAgewogICAgICAgIGFkanVzdEFaIC09IDEyODsgLy8gV3JhcCBhcm91bmQgdG8gbmVnYXRpdmUgcmFuZ2UgaWYgPj0gNjQKICAgIH0KICAgIHBoYXNlX2FjY3VtX2F6X3VpbnQgJj0gKDEgPDwgMjUpIC0gMTsKICAgIHBoYXNlQWNjdW1BWiA9IHBoYXNlX2FjY3VtX2F6X3VpbnQ7CiAgICB1aW50MzJfdCBQV01fQ1BSRFVQRDAgPSAoUE9MWV9QV01fUEVSSU9EIC8gMikgLSBhZGp1c3RBWjsKICAgIHByaW50ZigiJXUiLCBQV01fQ1BSRFVQRDApOwoJcmV0dXJuIDA7Cn0K