исправлен баг с записью во флеш
This commit is contained in:
parent
4fb36f9e64
commit
008a4a2fc0
@ -28,13 +28,13 @@ void main(void)
|
|||||||
InitPerif();
|
InitPerif();
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
asm (" NOP");
|
// asm (" NOP");
|
||||||
ipc_run();
|
ipc_run();
|
||||||
|
|
||||||
#ifdef CPU1
|
//#ifdef CPU1
|
||||||
// emif_run();
|
// emif_run();
|
||||||
// frmmstr_run();
|
// frmmstr_run();
|
||||||
#endif
|
//#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,6 +29,29 @@ uint16_t GD25Q16ETIGR_buffer8bytes[8];
|
|||||||
|
|
||||||
uint16_t SectorWasErraised[512];
|
uint16_t SectorWasErraised[512];
|
||||||
|
|
||||||
|
uint16_t writeVerify = 1;
|
||||||
|
|
||||||
|
|
||||||
|
void delay(void)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
for(i=0;i<100000;i++)
|
||||||
|
{
|
||||||
|
asm (" NOP");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void GD25Q16ETIGR_checkRXFFST(void)
|
||||||
|
{
|
||||||
|
volatile uint16_t empty;
|
||||||
|
while(SpiRegs.SPIFFRX.bit.RXFFST > 0)
|
||||||
|
{
|
||||||
|
empty = SpiRegs.SPIRXBUF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void GD25Q16ETIGR_clean_SectorWasErraised(void)
|
void GD25Q16ETIGR_clean_SectorWasErraised(void)
|
||||||
{
|
{
|
||||||
@ -43,6 +66,7 @@ void GD25Q16ETIGR_clean_SectorWasErraised(void)
|
|||||||
void GD25Q16ETIGR_en(void)
|
void GD25Q16ETIGR_en(void)
|
||||||
{
|
{
|
||||||
volatile uint16_t empty;
|
volatile uint16_t empty;
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
transmitData(WriteEnable);
|
transmitData(WriteEnable);
|
||||||
while(SpiRegs.SPIFFRX.bit.RXFFST != 1)
|
while(SpiRegs.SPIFFRX.bit.RXFFST != 1)
|
||||||
{
|
{
|
||||||
@ -54,6 +78,7 @@ void GD25Q16ETIGR_en(void)
|
|||||||
uint16_t GD25Q16ETIGR_ReadStatus(void)
|
uint16_t GD25Q16ETIGR_ReadStatus(void)
|
||||||
{
|
{
|
||||||
volatile uint16_t empty;
|
volatile uint16_t empty;
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
transmitData(ReadStatusRegister1);
|
transmitData(ReadStatusRegister1);
|
||||||
transmitData(0xFF);
|
transmitData(0xFF);
|
||||||
while(SpiRegs.SPIFFRX.bit.RXFFST != 2)
|
while(SpiRegs.SPIFFRX.bit.RXFFST != 2)
|
||||||
@ -93,6 +118,9 @@ uint16_t GD25Q16ETIGR_sector_erase(uint32_t Addr)
|
|||||||
if(Err) return Err;
|
if(Err) return Err;
|
||||||
|
|
||||||
GD25Q16ETIGR_en();
|
GD25Q16ETIGR_en();
|
||||||
|
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
|
|
||||||
transmitData(SectorErase);
|
transmitData(SectorErase);
|
||||||
transmitData(Addr>>16);
|
transmitData(Addr>>16);
|
||||||
transmitData(Addr>>8);
|
transmitData(Addr>>8);
|
||||||
@ -117,6 +145,8 @@ uint16_t GD25Q16ETIGR_read_8_bytes(uint32_t Addr, uint16_t * read_data, uint16_t
|
|||||||
Err = GD25Q16ETIGR_WaitStatus();
|
Err = GD25Q16ETIGR_WaitStatus();
|
||||||
if(Err) return Err;
|
if(Err) return Err;
|
||||||
|
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
|
|
||||||
transmitData(ReadData);
|
transmitData(ReadData);
|
||||||
transmitData(Addr>>16);
|
transmitData(Addr>>16);
|
||||||
transmitData(Addr>>8);
|
transmitData(Addr>>8);
|
||||||
@ -146,6 +176,8 @@ uint16_t GD25Q16ETIGR_verify_8_bytes(uint32_t Addr, uint16_t * verify_data, uint
|
|||||||
Err = GD25Q16ETIGR_WaitStatus();
|
Err = GD25Q16ETIGR_WaitStatus();
|
||||||
if(Err) return Err;
|
if(Err) return Err;
|
||||||
|
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
|
|
||||||
transmitData(ReadData);
|
transmitData(ReadData);
|
||||||
transmitData(Addr>>16);
|
transmitData(Addr>>16);
|
||||||
transmitData(Addr>>8);
|
transmitData(Addr>>8);
|
||||||
@ -161,11 +193,20 @@ uint16_t GD25Q16ETIGR_verify_8_bytes(uint32_t Addr, uint16_t * verify_data, uint
|
|||||||
empty = SpiRegs.SPIRXBUF;
|
empty = SpiRegs.SPIRXBUF;
|
||||||
for(j = 0; j<num_byte; j++)
|
for(j = 0; j<num_byte; j++)
|
||||||
{
|
{
|
||||||
if(verify_data[j] != SpiRegs.SPIRXBUF) return 1;
|
if(verify_data[j] != SpiRegs.SPIRXBUF) Err++;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
|
|
||||||
|
return Err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint16_t GD25Q16ETIGR_write_8_bytes(uint32_t Addr, uint16_t * write_data, uint16_t num_byte)//запись до 8 байт
|
uint16_t GD25Q16ETIGR_write_8_bytes(uint32_t Addr, uint16_t * write_data, uint16_t num_byte)//запись до 8 байт
|
||||||
{
|
{
|
||||||
volatile uint16_t empty, i, j;
|
volatile uint16_t empty, i, j;
|
||||||
@ -176,6 +217,9 @@ uint16_t GD25Q16ETIGR_write_8_bytes(uint32_t Addr, uint16_t * write_data, uint16
|
|||||||
if(Err) return Err;
|
if(Err) return Err;
|
||||||
|
|
||||||
GD25Q16ETIGR_en();
|
GD25Q16ETIGR_en();
|
||||||
|
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
|
|
||||||
transmitData(PageProgram);
|
transmitData(PageProgram);
|
||||||
transmitData(Addr>>16);
|
transmitData(Addr>>16);
|
||||||
transmitData(Addr>>8);
|
transmitData(Addr>>8);
|
||||||
@ -196,6 +240,53 @@ uint16_t GD25Q16ETIGR_write_8_bytes(uint32_t Addr, uint16_t * write_data, uint16
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t ErrAdr[8];
|
||||||
|
|
||||||
|
uint16_t GD25Q16ETIGR_write_veryfy_8_bytes(uint32_t Addr, uint16_t * write_data, uint16_t num_byte)//запись и проверка до 8 байт
|
||||||
|
{
|
||||||
|
uint16_t addr_write_data[8];
|
||||||
|
uint16_t addr_read_data[8];
|
||||||
|
uint16_t i, Err = 0, DoneOK = 0;
|
||||||
|
|
||||||
|
for(i = 0; i<num_byte; i++)
|
||||||
|
{
|
||||||
|
addr_write_data[i] = write_data[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
Err = GD25Q16ETIGR_write_8_bytes(Addr, addr_write_data, num_byte);
|
||||||
|
if(Err) return Err;
|
||||||
|
Err = GD25Q16ETIGR_read_8_bytes(Addr, addr_read_data, num_byte);
|
||||||
|
if(Err) return Err;
|
||||||
|
|
||||||
|
for(i = 0; i<num_byte; i++)
|
||||||
|
{
|
||||||
|
if(addr_write_data[i] == addr_read_data[i])
|
||||||
|
{
|
||||||
|
DoneOK++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Err = GD25Q16ETIGR_write_8_bytes(Addr+i, addr_write_data+i, 1);
|
||||||
|
if(Err) return Err;
|
||||||
|
Err = GD25Q16ETIGR_read_8_bytes(Addr, addr_read_data, num_byte);
|
||||||
|
if(Err) return Err;
|
||||||
|
if(addr_write_data[i] == addr_read_data[i])
|
||||||
|
{
|
||||||
|
DoneOK++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrAdr[Err] = Addr+i;
|
||||||
|
Err++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint16_t GD25Q16ETIGR_read_data(uint32_t Addr, uint16_t quant8, uint16_t * read_data)
|
uint16_t GD25Q16ETIGR_read_data(uint32_t Addr, uint16_t quant8, uint16_t * read_data)
|
||||||
{
|
{
|
||||||
uint32_t i=0;
|
uint32_t i=0;
|
||||||
@ -259,7 +350,8 @@ uint16_t GD25Q16ETIGR_write_1_page(uint32_t Addr, uint16_t quant8, uint16_t * wr
|
|||||||
for(i = 0; i < (quant8-8); i += 8)
|
for(i = 0; i < (quant8-8); i += 8)
|
||||||
{ //в этом цикле только полные посылки по 8 байт
|
{ //в этом цикле только полные посылки по 8 байт
|
||||||
copy16_to_8(write_data, addr_write_data, 4);
|
copy16_to_8(write_data, addr_write_data, 4);
|
||||||
Err = GD25Q16ETIGR_write_8_bytes(Addr+i, addr_write_data, 8);
|
if(!writeVerify) Err = GD25Q16ETIGR_write_8_bytes(Addr+i, addr_write_data, 8);
|
||||||
|
else Err = GD25Q16ETIGR_write_veryfy_8_bytes(Addr+i, addr_write_data, 8);
|
||||||
if(Err) return Err;
|
if(Err) return Err;
|
||||||
write_data += 4;
|
write_data += 4;
|
||||||
}
|
}
|
||||||
@ -268,7 +360,8 @@ uint16_t GD25Q16ETIGR_write_1_page(uint32_t Addr, uint16_t quant8, uint16_t * wr
|
|||||||
{//тут м.б. от 1 до 8 байт
|
{//тут м.б. от 1 до 8 байт
|
||||||
quant16 = quant16bitWords(quant8-i);
|
quant16 = quant16bitWords(quant8-i);
|
||||||
copy16_to_8(write_data, addr_write_data, quant16);
|
copy16_to_8(write_data, addr_write_data, quant16);
|
||||||
Err = GD25Q16ETIGR_write_8_bytes(Addr+i, addr_write_data, (quant8 - i));
|
if(!writeVerify) Err = GD25Q16ETIGR_write_8_bytes(Addr+i, addr_write_data, (quant8 - i));
|
||||||
|
else Err = GD25Q16ETIGR_write_veryfy_8_bytes(Addr+i, addr_write_data, (quant8 - i));
|
||||||
if(Err) return Err;
|
if(Err) return Err;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -314,6 +407,9 @@ uint16_t GD25Q16ETIGR_write_data(uint32_t Addr_8bit, uint16_t quant_8bit, uint16
|
|||||||
uint16_t GD25Q16ETIGR_ReadManufacturerDeviceID(void)
|
uint16_t GD25Q16ETIGR_ReadManufacturerDeviceID(void)
|
||||||
{
|
{
|
||||||
volatile uint16_t empty, i, j;
|
volatile uint16_t empty, i, j;
|
||||||
|
|
||||||
|
// GD25Q16ETIGR_checkRXFFST();
|
||||||
|
|
||||||
transmitData(ReadManufacturerDeviceID);
|
transmitData(ReadManufacturerDeviceID);
|
||||||
|
|
||||||
for(i = 0; i<5; i++) transmitData(0xFF);
|
for(i = 0; i<5; i++) transmitData(0xFF);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* ipc_init.c
|
* ipc_init.c
|
||||||
*
|
*
|
||||||
* Created on: 7 нояб. 2023 г.
|
* Created on: 7 нояб. 2023 г.
|
||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -140,33 +140,33 @@ void getMessage_from_Cm_Flash(void)
|
|||||||
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, INT_FLASH, 0, 0);
|
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, INT_FLASH, 0, 0);
|
||||||
break;
|
break;
|
||||||
case WRITE:
|
case WRITE:
|
||||||
FlashSektorStart = Internal_flash_Sektor_Addr(FactAddressFlash); //сектор с которого начинается запись
|
FlashSektorStart = Internal_flash_Sektor_Addr(FactAddressFlash); //сектор с которого начинается запись
|
||||||
FlashSektorEnd = Internal_flash_Sektor_Addr(FactAddressFlash + InData - 1); //сектор в котором конец записи (тот же или следующий, так как размер сектора больше размера буфера)
|
FlashSektorEnd = Internal_flash_Sektor_Addr(FactAddressFlash + InData - 1); //сектор в котором конец записи (тот же или следующий, так как размер сектора больше размера буфера)
|
||||||
if(!BlockWasErased[FlashSektorStart])
|
if(!BlockWasErased[FlashSektorStart])
|
||||||
{
|
{
|
||||||
MemOperationError = Internal_flash_Erase(FactAddressFlash); // если сектор с которого начинаем запись не был стёрт, то стираем его
|
MemOperationError = Internal_flash_Erase(FactAddressFlash); // если сектор с которого начинаем запись не был стёрт, то стираем его
|
||||||
if(!MemOperationError) BlockWasErased[FlashSektorStart] = 1;
|
if(!MemOperationError) BlockWasErased[FlashSektorStart] = 1;
|
||||||
else {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
else {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
||||||
}
|
}
|
||||||
if(FlashSektorEnd == FlashSektorStart) //если заканчиваем в этом же секторе что и начали, то просто пишем его
|
if(FlashSektorEnd == FlashSektorStart) //если заканчиваем в этом же секторе что и начали, то просто пишем его
|
||||||
{
|
{
|
||||||
MemOperationError = Internal_flash_Program(FactAddressFlash, InData);
|
MemOperationError = Internal_flash_Program(FactAddressFlash, InData);
|
||||||
if(MemOperationError) {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
if(MemOperationError) {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
||||||
}
|
}
|
||||||
else //если начали в одном секторе, а заканчиваем в другом то
|
else //если начали в одном секторе, а заканчиваем в другом то
|
||||||
{
|
{
|
||||||
if(!BlockWasErased[FlashSektorEnd])//стираем второй сектор если он не был стёрт ранее
|
if(!BlockWasErased[FlashSektorEnd])//стираем второй сектор если он не был стёрт ранее
|
||||||
{
|
{
|
||||||
MemOperationError = Internal_flash_Erase(FactAddressFlash+InData);
|
MemOperationError = Internal_flash_Erase(FactAddressFlash+InData);
|
||||||
if(!MemOperationError)BlockWasErased[FlashSektorEnd] = 1;
|
if(!MemOperationError)BlockWasErased[FlashSektorEnd] = 1;
|
||||||
else {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
else {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
||||||
}
|
}
|
||||||
block1 = internal_flash_FlashBankStartAddr(FlashSektorEnd)-FactAddressFlash; //вычисляем размер первого куска
|
block1 = internal_flash_FlashBankStartAddr(FlashSektorEnd)-FactAddressFlash; //вычисляем размер первого куска
|
||||||
block2 = InData - block1; //и размер куска для второго сектора
|
block2 = InData - block1; //и размер куска для второго сектора
|
||||||
MemOperationError = Internal_flash_Program(FactAddressFlash, block1); // и пишем сперва кусок в первый сектор,
|
MemOperationError = Internal_flash_Program(FactAddressFlash, block1); // и пишем сперва кусок в первый сектор,
|
||||||
if(MemOperationError) {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
if(MemOperationError) {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
||||||
MemOperationError = Internal_flash_Program(internal_flash_FlashBankStartAddr(FlashSektorEnd), block2); // потом кусок во второй
|
MemOperationError = Internal_flash_Program(internal_flash_FlashBankStartAddr(FlashSektorEnd), block2); // потом кусок во второй
|
||||||
if(MemOperationError) {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
if(MemOperationError) {IPC_sendCommand(IPC_CPU1_L_CM_R, MemOperationError, INT_FLASH, 0, 0); return;}//если ошибка -- отправляем сообщение и завершаем
|
||||||
}
|
}
|
||||||
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, INT_FLASH, 0, 0);
|
IPC_sendCommand(IPC_CPU1_L_CM_R, DONE_SUCCESS, INT_FLASH, 0, 0);
|
||||||
break;
|
break;
|
||||||
@ -188,7 +188,7 @@ void getMessage_from_Cm_Flash(void)
|
|||||||
#ifdef CPU1
|
#ifdef CPU1
|
||||||
void getMessage_from_Cm_EMIF(void)
|
void getMessage_from_Cm_EMIF(void)
|
||||||
{
|
{
|
||||||
uint16_t MemOperationError = 0;
|
// uint16_t MemOperationError = 0;
|
||||||
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, EMIF, 0, 0); return;}
|
if((InData > 2048)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, EMIF, 0, 0); return;}
|
||||||
if((InAddr+InData) > 0x100000*2) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, EMIF, 0, 0); return;}
|
if((InAddr+InData) > 0x100000*2) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, EMIF, 0, 0); return;}
|
||||||
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, EMIF, 0, 0);
|
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, EMIF, 0, 0);
|
||||||
@ -217,7 +217,7 @@ void getMessage_from_Cm_BL25CM1A(void)
|
|||||||
{
|
{
|
||||||
uint16_t MemOperationError = 0;
|
uint16_t MemOperationError = 0;
|
||||||
if((InData > 2048*2)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, BL25CM1A_1M_bit_SPI, 0, 0); return;}
|
if((InData > 2048*2)||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, BL25CM1A_1M_bit_SPI, 0, 0); return;}
|
||||||
if((InAddr+InData) > (BL25CM1A0_SIZE*2)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, BL25CM1A_1M_bit_SPI, 0, 0); return;}
|
if( ((InAddr+InData) > (BL25CM1A0_SIZE*2))||((InAddr) > (BL25CM1A0_SIZE*2)) ){IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, BL25CM1A_1M_bit_SPI, 0, 0); return;}
|
||||||
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, BL25CM1A_1M_bit_SPI, 0, 0);
|
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, BL25CM1A_1M_bit_SPI, 0, 0);
|
||||||
|
|
||||||
spi_TurnOffCS1_GD25Q16E();
|
spi_TurnOffCS1_GD25Q16E();
|
||||||
@ -248,8 +248,10 @@ void getMessage_from_Cm_BL25CM1A(void)
|
|||||||
void getMessage_from_Cm_GD25Q16E(void)
|
void getMessage_from_Cm_GD25Q16E(void)
|
||||||
{
|
{
|
||||||
uint16_t MemOperationError = 0;
|
uint16_t MemOperationError = 0;
|
||||||
|
|
||||||
|
uint32_t EndOfAdr = (InAddr+InData);
|
||||||
if((InData > (2048*2))||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, GD25Q16E_16M_bit_SPI, 0, 0); return;}
|
if((InData > (2048*2))||(InData == 0)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_LENGHT, GD25Q16E_16M_bit_SPI, 0, 0); return;}
|
||||||
if((InAddr+InData) > (GD25Q16E_SIZE*2)) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, GD25Q16E_16M_bit_SPI, 0, 0); return;}
|
if( (EndOfAdr > (GD25Q16E_SIZE*2)) || (InAddr > (GD25Q16E_SIZE*2)) ) {IPC_sendCommand(IPC_CPU1_L_CM_R, WRONG_ADDR, GD25Q16E_16M_bit_SPI, 0, 0); return;}
|
||||||
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, GD25Q16E_16M_bit_SPI, 0, 0);
|
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, GD25Q16E_16M_bit_SPI, 0, 0);
|
||||||
|
|
||||||
Gpio_SPI_CS_BL25CM1A(1);
|
Gpio_SPI_CS_BL25CM1A(1);
|
||||||
@ -390,7 +392,7 @@ void ipc_run(void)
|
|||||||
// CmConfRegs.CMRESCTL.all = SYSCTL_CMRESCTL_RESET | SYSCTL_REG_KEY;//.bit.RESETSTS = 1;
|
// CmConfRegs.CMRESCTL.all = SYSCTL_CMRESCTL_RESET | SYSCTL_REG_KEY;//.bit.RESETSTS = 1;
|
||||||
// DevCfgRegs.CPU2RESCTL.all = ((uint32_t)SYSCTL_CPU2RESCTL_RESET |(SYSCTL_REG_KEY & SYSCTL_CPU2RESCTL_KEY_M)); //.bit.RESET = 1;
|
// DevCfgRegs.CPU2RESCTL.all = ((uint32_t)SYSCTL_CPU2RESCTL_RESET |(SYSCTL_REG_KEY & SYSCTL_CPU2RESCTL_KEY_M)); //.bit.RESET = 1;
|
||||||
// EDIS;
|
// EDIS;
|
||||||
CpuSysRegs.SIMRESET.all = ((uint32_t)SYSCTL_REG_KEY | (uint32_t)1);//программный сброс всех контроллеров
|
CpuSysRegs.SIMRESET.all = ((uint32_t)SYSCTL_REG_KEY | (uint32_t)1);//программный сброс всех контроллеров
|
||||||
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, ZD24C02A_2K_I2C, 0, 0);
|
IPC_sendCommand(IPC_CPU1_L_CM_R, COMMAND_ACCEPTED, ZD24C02A_2K_I2C, 0, 0);
|
||||||
IPC_setFlagLtoR(IPC_CPU1_L_CM_R,(1<<0));
|
IPC_setFlagLtoR(IPC_CPU1_L_CM_R,(1<<0));
|
||||||
ReadFromCm = 0;
|
ReadFromCm = 0;
|
||||||
@ -425,4 +427,3 @@ void ipc_run(void)
|
|||||||
ReadFromCm = 0;
|
ReadFromCm = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* interrupts.c
|
* interrupts.c
|
||||||
*
|
*
|
||||||
* Created on: 21 àâã. 2023 ã.
|
* Created on: 21 <EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
|
||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ volatile uint16_t PWM_out = 2500;
|
|||||||
uint16_t Fault = 0, Fault_fix = 0, Ready = 0, Ready_Fix = 0;
|
uint16_t Fault = 0, Fault_fix = 0, Ready = 0, Ready_Fix = 0;
|
||||||
uint16_t counter1s=0;
|
uint16_t counter1s=0;
|
||||||
uint16_t FaultABC = 0, FaultABCFix = 0;
|
uint16_t FaultABC = 0, FaultABCFix = 0;
|
||||||
uint16_t PwmFlagStartADC = 0;
|
uint16_t PwmFlagStartCurrentMeashure = 0;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* spi_init.c
|
* spi_init.c
|
||||||
*
|
*
|
||||||
* Created on: 5 ñåíò. 2023 ã.
|
* Created on: 5 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2023 <EFBFBD>.
|
||||||
* Author: seklyuts
|
* Author: seklyuts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user