Jump to content

    

Recommended Posts

Здравствуйте!

Есть 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 нули.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this