DevkitProで使われているdswifiについて(1)
DevkitProに使われているdswifiについて、私も余り詳しくは無いですが通信のソースを読んで、何をしているのか調べてみたいと思います。
今日は、紀伊半島から新幹線で東京出張日帰りというヘビーな1日だったので、何やかんやしていたら、こんな時間になってしまいました。久しぶりの東京は暖かかったのでびっくりです。
ARM9とARM7の通信部
dswifiのプロセッサー間通信は、fifoチャネル"FIFO_DSWIFI"を使うことにより行っています。そこで、dswifiのソースから、このFIFO_DSWIFIを使っているところを検索してみます。
結果は以下の6ヶ所でした。(ソースはdswifi-src-0.3.11使用)
ソースwifi_wrm9.cより、3ヶ所。
// notification function to send fifo message to arm7 //--------------------------------------------------------------------------------- void arm9_synctoarm7() { //--------------------------------------------------------------------------------- fifoSendValue32(FIFO_DSWIFI, WIFI_SYNC); } //--------------------------------------------------------------------------------- bool Wifi_InitDefault(bool useFirmwareSettings) { //--------------------------------------------------------------------------------- fifoSetValue32Handler(FIFO_DSWIFI, wifiValue32Handler, 0); u32 wifi_pass = Wifi_Init(WIFIINIT_OPTION_USELED); if(!wifi_pass) return false; irqSet(IRQ_TIMER3, Timer_50ms); // setup timer IRQ irqEnable(IRQ_TIMER3); Wifi_SetSyncHandler(arm9_synctoarm7); // tell wifi lib to use our handler to notify arm7 // set timer3 TIMER3_DATA = -6553; // 6553.1 * 256 cycles = ~50ms; TIMER3_CR = 0x00C2; // enable, irq, 1/256 clock fifoSendAddress(FIFO_DSWIFI, (void *)wifi_pass); while(Wifi_CheckInit()==0) { swiWaitForVBlank(); } if(useFirmwareSettings) { int wifiStatus = ASSOCSTATUS_DISCONNECTED; Wifi_AutoConnect(); // request connect while(wifiStatus != ASSOCSTATUS_ASSOCIATED) { wifiStatus = Wifi_AssocStatus(); // check status if(wifiStatus == ASSOCSTATUS_CANNOTCONNECT) return false; swiWaitForVBlank(); } } return true; }void arm9_synctoarm7() の fifoSendValue32(FIFO_DSWIFI, WIFI_SYNC);と、
bool Wifi_InitDefault(bool useFirmwareSettings) の1行目の
fifoSetValue32Handler(FIFO_DSWIFI, wifiValue32Handler, 0);と、14行目のfifoSendAddress(FIFO_DSWIFI, (void *)wifi_pass);
ソースwifi_wrm7.cより、3ヶ所。
// callback to allow wifi library to notify arm9 static void arm7_synctoarm9() { fifoSendValue32(FIFO_DSWIFI, WIFI_SYNC); } void installWifiFIFO() { irqSet(IRQ_WIFI, Wifi_Interrupt); // set up wifi interrupt Wifi_SetSyncHandler(arm7_synctoarm9); // allow wifi lib to notify arm9 fifoSetValue32Handler(FIFO_DSWIFI, wifiValue32Handler, 0); fifoSetAddressHandler(FIFO_DSWIFI, wifiAddressHandler, 0); }static void arm7_synctoarm9() の fifoSendValue32(FIFO_DSWIFI, WIFI_SYNC);と、
void installWifiFIFO() の
fifoSetValue32Handler(FIFO_DSWIFI, wifiValue32Handler, 0);と、fifoSetAddressHandler(FIFO_DSWIFI, wifiAddressHandler, 0);
ARM7のvoid installWifiFIFO()は、お決まりの2行ですね。
とりあえず、今日はこの辺で・・・。
本当にやりたいことリスト
(ブログの終わりにやりたいことを書いておきたいと思います)
- 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
- Androidプログラム
- Web系のプログラム