#include "eeprom_unit.h"
unsigned char temp[4];
unsigned char count,b;
char letra = 'H';
unsigned int EEAddres = 5000;
void TX1(char c){
UART1_Write(c);
}
void TX_DMA1() iv IVT_INT_DMA1_Channel4 ics ICS_AUTO {
if(DMA1_ISR.TCIF4 == 1){
DMA1_IFCR.CGIF4 = 1;
DMA1_CCR4.EN = 0;
}
}
void Eeprom_DMA_Wr() iv IVT_INT_DMA1_Channel6 ics ICS_AUTO {
if(DMA1_ISR.TCIF6 == 1){
DMA1_IFCR.CGIF6 = 1;
DMA1_CCR4.EN = 0;
}else if(DMA1_ISR.TEIF6 == 1){
PrintOut(TX1,"Hubo un Error Escribiendo\r\n");
DMA1_IFCR.CTEIF6 = 1;
DMA1_CCR6.EN = 0;
}
}
void Config_Dma1_TX(){
DMA1_CPAR4 = 0x40013804; //Direccion del Registro del Uart1
DMA1_CMAR4 = &test; //La data que se va a mandar
DMA1_CNDTR4
= strlen(&test
); //La cantidad de Datos que va a mandar
DMA1_CCR4.MEM2MEM = 0; //Modo Memoria a Memoria Deshabilitado
DMA1_CCR4.MINC = 1; //Modo Incremento de Memoria
DMA1_CCR4.CIRC = 1; //Modo Circular Habilitado
DMA1_CCR4.PL0 = 0; //Nivel de
DMA1_CCR4.PL1 = 1; //Prioridad
DMA1_CCR4.PSIZE0 = 0; //Tamaño en bit's que
DMA1_CCR4.PSIZE1 = 0; // va a recibir el periferico
DMA1_CCR4.MSIZE0 = 0; //Tamaño en bit's que
DMA1_CCR4.MSIZE1 = 0; // va manejar la memoria
DMA1_CCR4.B4 = 1; // Sentido de la Transmision de la Data (lee desde el Periferico (UART) )
DMA1_CCR4.TCIE = 1; //Interrupcion por Transferencia Completa
DMA1_CCR4.EN = 1; //Habilita el Chanel 4 del DMA1
}
void Eeprom_DMA_Write(){
DMA1_CPAR6 = 0X40005410; //Va para el I2C1
DMA1_CMAR6 = &temp; //data a enviar
DMA1_CCR6.MEM2MEM = 0;
DMA1_CCR6.MINC = 1;
delay_ms(20);
DMA1_CCR6.PINC = 0;
DMA1_CCR6.CIRC = 0;
DMA1_CCR4.PL0 = 0;
DMA1_CCR4.PL1 = 1;
DMA1_CCR6.MSIZE0 = 0;
DMA1_CCR6.MSIZE1 = 0;
DMA1_CCR6.PSIZE0 = 0;
DMA1_CCR6.PSIZE1 = 0;
DMA1_CCR6.B4 = 1;
DMA1_CCR6.TCIE = 1;
DMA1_CCR6.TEIE = 1;
DMA1_CCR6.EN = 1;
}
void main(){
UART1_Init_Advanced(9600, _UART_8_BIT_DATA, _UART_NOPARITY, _UART_ONE_STOPBIT, &_GPIO_MODULE_USART1_PA9_10); // Serial UART
USART1_CR3.DMAT = 1;
USART1_CR1bits.RXNEIE = 0;
delay_ms(100);
temp[0] = 0xA0;
temp[2] = lo(EEAddres);
temp[1] = hi(EEAddres);
temp[3] = 'I';
I2C1_Init_Advanced(400000,&_GPIO_MODULE_I2C1_PB67);
I2C1_CR2.DMAEN = 1;
I2C1_CR2.LAST = 1;
RCC_AHBENR.DMA1EN = 1;
delay_ms(10);
Eeprom_DMA_Write();
delay_ms(50);
PrintOut(TX1,"Sale de la funcion Write\r\n");
EnableInterrupts();
NVIC_IntEnable(IVT_INT_DMA1_Channel4);
b = EEPROM_RdSingle(EEAddres); //<---- Funcion de la libreia que uso para checar que si escribiera en la EEPROM
NVIC_IntEnable(IVT_INT_DMA1_Channel6);
PrintOut(TX1,"Contenido de la direccion: %u y la letra:%c\r\n",EEAddres,b);
while(1){
}
}