Warlord 0 24 февраля, 2014 Опубликовано 24 февраля, 2014 · Жалоба Здравствуйте! Есть DSP 5509A, c внешним кварцем на 12МГц. Пытаюсь загнать его в режим IDLE, с выключением всех доменов, и получить заветные микроамперы, сулимые даташитом spra078d.pdf. Код отрабатывает, ядро засыпает - видно по снижению потребления и, собственно, по коду. Но кварец продолжает стучать. Камень грузится из флэша по spi. Перед засыпанием никакие прерывания не разрешаю. Приведу код, вдруг что-нибудь упустил. Прошу прощение за "magic nubmers". CSL не использую, чтобы ничего не упустить. volatile int i; _disable_interrupts(); *EBSR = 0x8000; // Clockout disable in External Bus Selection Register *USBDPLL = 0x0200; // set USB PLL to x4 in USB PLL register *USBDPLL = 0x0210; // set lock bit *USBIDLECTL = 0x0004; // activate USB (USB Reset = 1) in USB IDLE Control register *USBCTL |= 0x0080; // pull DP high in USB CTL *USBIDLECTL = 0x0005; // activate USB and enable USB idle (USB Reset =1, USB Idle = 1) *EBSR = 0xc000; // Clockout & osc disable in External Bus Selection Register *I2CMDR2 = 0x0001; // IDLE IIC *ADCCLKCTL = 0x0100; // IDLE ADC *(ioport volatile unsigned int *)0x2812 |= 0x4000; // IDLE McBSP0 with PCR0 *(ioport volatile unsigned int *)0x2C12 |= 0x4000; // IDLE McBSP1 with PCR1 *(ioport volatile unsigned int *)0x3012 |= 0x4000; // IDLE McBSP2 with PCR2 *(ioport volatile unsigned int *)0x1002 |= 0x8000; // IDLE Timer0 with TCR0 *(ioport volatile unsigned int *)0x2402 |= 0x8000; // IDLE Timer1 with TCR1 *IER0 = 0x0000; *IER1 = 0x0000; *IFR0 = 0xffff; *IFR1 = 0xffff; *ICR = 0x002E; // enable EMIF, Peripheral, and DMA idle for (i=0; i<1000; i++); asm(" IDLE"); *ICR = 0x003F; // enable all domens idle // delay of at least 2.5 us needed between the two IDLE instructions for (i=0; i<1000; i++); asm(" IDLE"); Есть подозрение, что какой-то блок не даёт выключить домен CLKGEN. Если запустить код под эмулятором, то после нажатия Halt, регистр ISTR (Idle Status Register) содержит 0x003F. т.е. все блоки в неактивном состоянии. В регистрах IFR0 и IFR1 нули. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться