A_INT32 Ar9300_SWREG_PROGRAM_Set(int value) { int status=VALUE_OK; unsigned int address, swregAddr; int low, high; int ngot; char regName[100]; A_UINT32 reg; if (value==1) { ngot=FieldFind("REG_CONTROL0.SWREG_pwd",&swregAddr,&low,&high); if (ngot<1) return ERR_VALUE_BAD; sprintf(regName, "REG_CONTROL1.SWREG_PROGRAM"); ngot=FieldFind(regName,&address,&low,&high); if (ngot==1) { // disable internal regulator program write. MyFieldWrite(address,low,high,0); // set swreg from eep structure to HW reg = Ar9300EepromStructGet()->baseEepHeader.swreg; MyRegisterWrite(swregAddr, reg); // apply internal regulator program write. MyFieldWrite(address,low,high,1); } else return ERR_VALUE_BAD; } return 0; }
static void REGW(unsigned long devNum,unsigned long address, unsigned long value) { devNum =0; MyRegisterWrite(address, value); }
static int TemperatureRestart() { unsigned int save; unsigned int reg; unsigned int txReg; unsigned int readbackReg=0; int i; int pass = 1; // //Look for interframe spacing // /* for(i = 0; i<NUM_TX_FRAME_READS;i++) { MyRegisterRead(0x806c, &txReg); if(txReg & 0x200) { break; } // UserPrint("txReg = %d\n", txReg); } */ //read again to cause delay // MyRegisterRead(0x806c, &txReg); // // read and remember value // /////// MyRegisterRead(TemperatureAdc2Address,&save); // UserPrint("save=%x ",save); // // set these two bits // MyRegisterRead(TemperatureLocalAddress,®); reg |= (1<<TemperatureLocalLow); reg |= (1<<TemperatureStartLow); // UserPrint("writing to set bits reg=%x ",reg); MyRegisterWrite(TemperatureLocalAddress, reg); for (i=0;i<20;i++) { // MyDelay(1); MyRegisterRead(TemperatureLocalAddress, &readbackReg); // UserPrint("in local set: resetReg = %x\n", readbackReg); if(readbackReg & ((1<<TemperatureLocalLow) | (1<<TemperatureStartLow)) ) { break; } } if(i == 20) { UserPrint("!!!!!!!local_therm and/or thermStartbit not set, continue anyway reg = %x\n", readbackReg); pass = 0; } /* MyRegisterWrite(TemperatureLocalAddress,(reg | (1<<TemperatureStartLow))); for (i=0;i<10;i++) { // MyDelay(1); MyRegisterRead(TemperatureLocalAddress, &readbackReg); ///// UserPrint("in start set: resetReg = %x\n", readbackReg); if((readbackReg & (1<<TemperatureStartLow))) { break; } } if(i == 10) { UserPrint("!!!!!!!thermstart bit not set, continue anyway reg = %x\n", readbackReg); pass = 0; } */ // // then clear them // reg &= ~(1<<TemperatureLocalLow); reg &= ~(1<<TemperatureStartLow); //UserPrint("writing to clear bits reg-> %x ",reg); MyRegisterWrite(TemperatureLocalAddress,reg); for (i=0;i<10;i++) { // MyDelay(1); MyRegisterRead(TemperatureLocalAddress, &readbackReg); //// UserPrint("in local clear: resetReg = %x\n", readbackReg); if(((readbackReg >> TemperatureLocalLow) & 0x1)==0 ) { break; } } if(i == 10) { UserPrint("!!!!!!!local bits not clear, continue anyway reg = %x\n", readbackReg); pass = 0; } TemperatureStuckCount=0; //// UserPrint("temperature restart\n"); return (pass); }