void pmSetReg(int reg, int control) { SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz | SPI_CONTINUOUS; REG_SPIDATA = reg; SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz; REG_SPIDATA = control; }
void PA_ScreenLight(void){ SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz | SPI_CONTINUOUS; REG_SPIDATA = 0; SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz; REG_SPIDATA = PA_NewSPI; // On met en fonction de ce qu'on a dans l'IPC }
u8 pmGetReg(int reg) { SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz | SPI_CONTINUOUS; REG_SPIDATA = reg | 0x80; SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz ; REG_SPIDATA = 0; SerialWaitBusy(); return REG_SPIDATA & 0xFF; }
void PA_WriteSPI(u8 pmReg, u8 pmData) { SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz | SPI_CONTINUOUS; REG_SPIDATA = pmReg; SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz; REG_SPIDATA = pmData; SerialWaitBusy(); }
u16 PA_ReadSPI(void){ u8 pmData; SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz | SPI_CONTINUOUS; REG_SPIDATA = (1 << 7); SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz; // On revient en mode single byte ... REG_SPIDATA = 0; // On indique à nouveau qu'on veut lire ... SerialWaitBusy(); pmData = REG_SPIDATA; // Et on récupère la valeur du registre ! REG_SPICNT = 0; // Pour finit on arrête le SPI ... return pmData; }
extern "C" void handle_ipc(u32 type) { // if (arm7_initialised) // { // keepalive++; // if (keepalive > 96) // { // ARM7_PRINT("keepalive\n"); // keepalive = 0; // } // } //if (quake_ipc_9to7->message == 0xffffffff) //{ // ARM7_PRINTF("message type %d\n", quake_ipc_9to7->message_type); switch (type) { case kPrintMessage: { ARM7_PRINTF((char *)quake_ipc_9to7_buf); break; } case kStopAllSounds: { ARM7_PRINT("ARM7: Stopping sounds..."); stopAllSounds(); ARM7_PRINT("...done\n"); break; } case kPlayMP3: { ARM7_PRINT("arm7 mp3 start msg\ntrack: "); memcpy((void *)track_name, (void *)quake_ipc_9to7_buf, 100); ARM7_PRINT((char *)track_name); ARM7_PRINT("\n"); do_mp3 = 1; break; } case kStopMP3: { ARM7_PRINT("arm7 mp3 stop msg\n"); do_mp3 = 0; // if (decoder_stopped) // send_mp3_stop_message(); break; } //sound subsystem case kS_Init: { S_Init7(((unsigned int *)quake_ipc_9to7_buf)[0], ((unsigned int *)quake_ipc_9to7_buf)[1]); break; } case kS_AmbientOff: { S_AmbientOff7(); break; } case kS_AmbientOn: { S_AmbientOn7(); break; } case kS_Shutdown: { S_Shutdown7(); break; } case kS_TouchSound: { S_TouchSound7((char *)quake_ipc_9to7_buf); break; } case kS_ClearBuffer: { S_ClearBuffer7(); break; } case kS_StaticSound: { float *floats = (float *)quake_ipc_9to7_buf; S_StaticSound7((void *)*(unsigned int *)quake_ipc_9to7_buf, &floats[1], floats[4], floats[5]); break; } case kS_StartSound: { float *floats = (float *)quake_ipc_9to7_buf; S_StartSound7(((unsigned int *)quake_ipc_9to7_buf)[0], ((unsigned int *)quake_ipc_9to7_buf)[1], (void *)((unsigned int *)quake_ipc_9to7_buf)[2], &floats[3], //floats[6], floats[7], ((unsigned int *)quake_ipc_9to7_buf)[8], ((unsigned int *)quake_ipc_9to7_buf)[9]); break; } case kS_StopSound: { S_StopSound7(((unsigned int *)quake_ipc_9to7_buf)[0], ((unsigned int *)quake_ipc_9to7_buf)[1]); break; } case kS_StopAllSounds: { S_StopAllSounds7(((unsigned int *)quake_ipc_9to7_buf)[0]); break; } case kS_ClearPrecache: { S_ClearPrecache7(); break; } case kS_BeginPrecaching: { S_BeginPrecaching7(); break; } case kS_EndPrecaching: { S_EndPrecaching7(); break; } case kS_PrecacheSound: { void *pc = S_PrecacheSound7((char *)quake_ipc_9to7_buf); *(unsigned int *)quake_ipc_7to9_buf = (unsigned int)pc; break; } case kS_Update: { // float *floats = (float *)quake_ipc_9to7_buf; // S_Update7(&floats[0], &floats[3], &floats[6], &floats[9]); S_UpdateStatics((void *)((unsigned int *)quake_ipc_9to7_buf)[12], ((unsigned int *)quake_ipc_9to7_buf)[13]); break; } case kS_ExtraUpdate: { S_ExtraUpdate7(); break; } case kS_LocalSound: { S_LocalSound7((char *)quake_ipc_9to7_buf); break; } case kFreeTime: case kRunningOut: case kGetReady: { //free_time = quake_ipc_9to7->message_type; // ARM7_PRINTF("free time is %d\n", quake_ipc_9to7->message_type); break; } case kStartWifi: { #ifdef WIFI_ON_DEMAND // ARM7_PRINT("ARM7 Initialising wifi...\n"); wifi_go(); // ARM7_PRINTF("ARM7 ...done\n"); #else ARM7_PRINT("Wifi has already been initialised\n"); #endif break; } case kDMATransfer: { unsigned int source = ((unsigned int *)quake_ipc_9to7_buf)[0]; unsigned int size = ((unsigned int *)quake_ipc_9to7_buf)[1]; unsigned int dest = ((unsigned int *)quake_ipc_9to7_buf)[2]; while(DMA_CR(dma_channel & 0x3) & DMA_BUSY); DMA_SRC(dma_channel & 0x3) = source; DMA_DEST(dma_channel & 0x3) = dest; DMA_CR(dma_channel & 0x3) = (DMA_ENABLE | DMA_32_BIT | DMA_DST_FIX | DMA_START_NOW) | size; while(DMA_CR(dma_channel & 0x3) & DMA_BUSY); // ARM7_PRINT("from "); // ARM7_PRINT_NUMBER(source); // ARM7_PRINT("to "); // ARM7_PRINT_NUMBER(dest); // ARM7_PRINT("size "); // ARM7_PRINT_NUMBER(size); dma_channel++; break; } case kPowerOff: { ARM7_PRINT("ARM7: Powering down...\n"); SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz | SPI_CONTINUOUS; REG_SPIDATA = 0; SerialWaitBusy(); REG_SPICNT = SPI_ENABLE | SPI_DEVICE_POWER | SPI_BAUD_1MHz; REG_SPIDATA = 1 << 6; break; } case kBspRender: { // ARM7_PRINT("ARM7: BSP Render\n"); setup_bsp_render((void *)((unsigned int *)quake_ipc_9to7_buf)[0], (void *)((unsigned int *)quake_ipc_9to7_buf)[1], ((int *)quake_ipc_9to7_buf)[2], ((int *)quake_ipc_9to7_buf)[3], (unsigned char *)((unsigned int *)quake_ipc_9to7_buf)[4], (int **)((unsigned int *)quake_ipc_9to7_buf)[5], (int *)((unsigned int *)quake_ipc_9to7_buf)[6], (unsigned int *)((unsigned int *)quake_ipc_9to7_buf)[7]); // ARM7_PRINT("ARM7: BSP Render done\n"); break; } // default: { ARM7_PRINT("some other message, "); ARM7_PRINT_NUMBER(type); ARM7_PRINT("\n"); break; } } //quake_ipc_9to7->message = 0; fifoSendValue32(FIFO_9to7,0); //} low_mem: if (low_memory) { mark_freeable(); free_marked(); low_memory = false; } }
static u8 readwriteSPI(u8 data) { REG_SPIDATA = data; SerialWaitBusy(); return REG_SPIDATA; }