/* 
 * File:   MainMotion.h
 * Author: Antimatter
 *
 * Created on September 24, 2023, 2:14 PM
 */

#ifndef MAINMOTION_H
#define	MAINMOTION_H

#include <stdbool.h>

#define LED0 PORTDbits.RD8
#define LED1 PORTDbits.RD9
#define LED2 PORTCbits.RC9
#define LED3 PORTCbits.RC8

//Control
//    uint8_t crun:        0;
//    uint8_t cdir:        1;
//    uint8_t ccnt:        2;
//    uint8_t chome:       3;

//            cb4          4;
//    uint8_t cb5:         5;
//    uint8_t cb6:         6;
//            cb7:         7;

//Status
//    uint8_t srdy:        0;
//    uint8_t srun:        1;
//    uint8_t sdir:        2;
//    uint8_t scnt:        3;

//    uint8_t shome:       4;
//    uint8_t sacc_done:   5;
//    uint8_t drive fault  6;
//    uint8_t drive lock   7;

extern volatile bool SRAM_BUSY;
void SRAM_Semaphore_Test(void);
void Timer1_Init(void);
void Delay(unsigned delay_us);
void dsPIC33_Interrupts_Init(void);
void dsPIC33_PMP_Init(void);
void PWM_Init(void);
void Motor_Run(void);
void SEQ_Run(uint8_t seqNum);
void Seq_Stop(void);
void Motor_Stop(void);
void Motor_Home(void);
void Clear_Count(void);
void dsPIC33_REN70V05_Init(void);

void dsPIC33_memtest_REN70V05(void);
void PWM_Init(void);

void WritePosSRAM(void);
void WriteIndexSRAM(void);
void dsPIC33_REN70V05_WR(uint16_t address_70V05, uint8_t volatile mdata_70V05);
uint8_t dsPIC33_REN70V05_RD(uint16_t volatile address_70V05);

extern uint16_t address_70V05;
extern volatile uint8_t mdata_70V05;
extern int sram_test;
extern int sram_test_data[];
extern int sram_lock;
extern int sram_block;
extern bool sram_busy;
extern int sram_fail_count;

#endif	/* MAINMOTION_H */

