0

¹ØÓÚͶƱ
Socket¿Ø¼þ·þÎñÆ÷¼°¿Í»§¶ËDelphiÑÝʾ³ÌÐòÔ´ÂëÏÂÔØ
µã»÷ÏÂÔØ:
1. Socket¿Ø¼þ·þÎñÆ÷¶ËDelphiÑÝʾ³ÌÐòÔ´Âë
µã»÷´Ë´¦ÏÂÔØServer.rar
2. Socket¿Ø¼þ¿Í»§¶ËDelphiÑÝʾ³ÌÐòÔ´Âë
µã»÷´Ë´¦ÏÂÔØClient.rar
3.ÓйØSocketµÄÍøÉÏÌû×Óժ¼
µã»÷´Ë´¦ÏÂÔØSocket.rar
 
ÑÝʾͼ:
 
ϵͳ·ÖÀà: Èí¼þ¿ª·¢
Óû§·ÖÀà: ¿ªÔ´Îļþ°ü
±êÇ©: ÎÞ±êÇ©
À´Ô´: Ô­´´
·¢±íÆÀÂÛ ÔĶÁÈ«ÎÄ(882) | »Ø¸´(0)

1

¹ØÓÚͶƱ
RVDEMO(Äòͯ°æ)

ÔÚÁùÒ»Ö®¼Ê,²ËũΪ"Äòͯ"×£¸£°É~~~

rvdemo.rar

ϵͳ·ÖÀà: ARM
Óû§·ÖÀà: ¿ªÔ´Îļþ°ü
±êÇ©: ÎÞ±êÇ©
À´Ô´: Ô­´´
·¢±íÆÀÂÛ ÔĶÁÈ«ÎÄ(515) | »Ø¸´(0)

2

¹ØÓÚͶƱ
LPCARMÖжϷǵ䷽·¨´óȫʥµ®Âã±¼³ÌÐòÏê½â(¸üÐÂ)
LPCARMÖжϷǵ䷽·¨´óȫʥµ®Âã±¼³ÌÐòÏê½â(¸üÐÂ)
ÑãËþ²ËÅ© ·¢±íÓÚ 2006-12-24 22:00:00
/*----------------------------------------------------------------------------------
          LPCARMÖжϷǵ䷽·¨´óȫʥµ®Âã±¼³ÌÐòÏê½â(¸üÐÂ)
ÑãËþ²ËÅ©HotPower   2006.12.25 ¸üÐÂÓڲ˵ØHttp://HotPower.21ic.org/
----------------------------------------------------------------------------------*/
££i nclude     //ARM²ËÄñHotPower´´½¨¶¨ÒåÎļþ(×îÐÂΪµ¹Ëú°æ)
/*---------------------------------------------------------------------------------
×¢Ò⣺
LPC213XDEF.HÎļþÇëÔÚuser1/46/archives/2006/16994.htmlÏÂÔØ
¿É½«LPC213XDEF.H¿½±´µ½Keil\ARM\INC\PHILIPSĿ¼ÏÂ
 
µã»÷ÏÂÔØ±¾Âã±¼¹¤³Ì°ü:uploadfile-/2006-12/1225579810.rar

----------------------------------------------------------------------------------*/


void __swi(0) Enable_IRQ(void);
void __SWI_0            (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    BIC tmp, tmp, #0x80
    MSR SPSR_c, tmp
  }
}

void __swi(1) Disable_IRQ(void);
void __SWI_1             (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    ORR tmp, tmp, #0x80
    MSR SPSR_c, tmp
  }
}

void __swi(2) Enable_FIQ(void);
void __SWI_2            (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    BIC tmp, tmp, #0x40
    MSR SPSR_c, tmp
  }
}

void __swi(3) Disable_FIQ(void);
void __SWI_3             (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    ORR tmp, tmp, #0x40
    MSR SPSR_c, tmp
  }
}

void __swi(4) Enable_VIC(void);
void __SWI_4            (void) {
  VIC->Protection = 0;//¿ª·Å¶ÔVICµÄдÈë±£»¤
}

/*-------------------------------------------------------------
  SWIÖжϺÍVICSoftIntÈí¼þÖжϵÄÇø±ðÖ®´¦

  ÓÉÓÚVIC->Protection¿ÉÒÔÔÚÈκμ¶±ðËæÒâÖÃ'1'£¬¼´¹Ø±Õ
¶ÔVICµÄдÈ룬¹Êû±ØÒª¹¹ÔìDisable_VIC();
  ÒÔϺ¯ÊýSetVICProtection()Ö»ÊÇ˵Ã÷SWIÖжϺÍVICSoftIntÈí¼þ
ÖжϵÄÇø±ð£¬¼´Ç°ÕßÊôÓÚ·ÇÆÁ±ÎÖжϣ¬ÇÒ¿É´ø²ÎÊýºÍ·µ»ØÖµ¡£
¶øºóÕߺÍÊôÓÚ¿ÉÆÁ±ÎÖжϣ¬ÓëVICÖжÏÒ»Ñù£¬ÎÞ²ÎÊýºÍ·µ»ØÖµ¡£
µ«VICSoftIntÈí¼þÖжÏÓбðÓÚÄ£¿éµÄVICÖжϡ£Ëü¿É×Ô×éÖжϣ¬Ò²¿É
Ä£Äâϵͳģ¿éÖжϡ£
  Á½Õß¶¼ºÜÁé»î£¬µ«ÓÃ;ºÍ·½·¨ÓкܴóµÄ²îÒì¡£
SWIÖжϸĽøµÄ×¢½â¼ûSWI.sºÍSWI_Table.s.·ñÔò²»ÄÜÕýÈ·¿ª¹ØFIQ/IRQ
--------------------------------------------------------------*/
unsigned int __swi(5) SetVICProtection(unsigned int val);
unsigned int __SWI_5                  (unsigned int val) {
  VIC->Protection = val;//VIC->Protection¿ÉÒÔËæÒâÖÃ'1',µ«Çå'0'±ØÐëÔÚ¹ÜÀíģʽÏÂ
  return VIC->Protection;
}

extern void FIQ_EINT0 (void) __irq
{
  VIC->SoftIntClr = (1 << VICIntSel_EINT0);//ÔöÇ¿°²È«ÐÔ
  INTCON->EXT_INT = (1 << EINT0);    //Çå³ýINT0ÖжϱêÖ¾
  VIC->VectAddr = 0;
}

void IRQ_EINT1 (void) __irq
{
  VIC->SoftIntClr = (1 << VICIntSel_EINT1);;//ÔöÇ¿°²È«ÐÔ
  while(INTCON->EXT_INT & (1 << EINT1)) {//µÈ´ýP0_3ºÍP0_14¶¼Îª¸ßµçƽ
    INTCON->EXT_INT = (1 << EINT1);//Çå³ýINT1ÖжϱêÖ¾(µçƽ´¥·¢±ØÐë¶ÁºóÇå³ý!!!)
  }
  VIC->VectAddr = 0;
}

void IRQ_SOFT (void) __irq
{
  VIC->SoftIntClr = (1 << VICIntSel_SoftInt22);//Çå³ýÓû§Èí¼þÖжϱêÖ¾
  VIC->VectAddr = 0;
}

void IRQ_Default (void) __irq
{
  switch(VIC->IRQStatus) {
    case (1 << VICIntSel_EINT0)://À¹½Ø·Ç·¨INT0ÖжÏ
      INTCON->EXT_INT = (1 << EINT0);//Çå³ý·Ç·¨INT0ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT0);//Çå³ý·Ç·¨INT0Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_EINT1)://À¹½Ø·Ç·¨INT1ÖжÏ
      INTCON->EXT_INT = (1 << EINT1);//Çå³ý·Ç·¨INT1ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT1);//Çå³ý·Ç·¨INT1Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_EINT2)://À¹½Ø·Ç·¨INT2ÖжÏ
      INTCON->EXT_INT = (1 << EINT2);//Çå³ý·Ç·¨INT2ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT2);//Çå³ý·Ç·¨INT2Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_EINT3)://À¹½Ø·Ç·¨INT3ÖжÏ
      INTCON->EXT_INT = (1 << EINT3);//Çå³ý·Ç·¨INT2ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT3);//Çå³ý·Ç·¨INT3Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt23)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt23
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt23);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt24)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt24
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt24);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt25)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt25
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt25);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt26)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt26
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt26);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    default:
      VIC->SoftIntClr = 0xffffff;//Çå³ýËùÓзǷ¨Óû§Èí¼þÖжϱêÖ¾
  }
  VIC->VectAddr = 0;
}

int main(void)
{
unsigned int i;

  Disable_IRQ();//¹Ø±ÕÏòÁ¿ÖжÏ×Ü¿ª¹Ø
  Disable_FIQ();//¹Ø±Õ¿ìËÙÖжÏ×Ü¿ª¹Ø

  VIC->IntEnable  = 0;//¹Ø±ÕÈ«²¿ÖжÏ
  VIC->SoftIntClr = 0xffffffff;//Çå³ýËùÓÐÈíÖжϱêÖ¾
  VIC->IntSelect  = 0;//È«²¿ÖжÏΪIRQÖжϻòĬÈÏÖжÏ

  PINSEL->PIN_SEL0 = 0x00000000;//ÉèÖùܽÅÁ¬½ÓGPIO
  PINSEL->PIN_SEL1 = 0x00000000;//ÉèÖùܽÅÁ¬½ÓGPIO
  P0->IODIR        = 0x00000000;//ÉèÖÃP0¿ÚΪÊäÈë
  P1->IODIR        = 0x00000000;//ÉèÖÃP1¿ÚΪÊäÈë

  PINSEL->PIN_SEL0  |= (P0_1_EINT0 << P0_1_PINSEL);   //Ñ¡ÔñP0.1ΪINT0ÍⲿÖжÏÒý½Å
  PINSEL->PIN_SEL1  |= (P0_16_EINT0 << P0_16_PINSEL); //Ñ¡ÔñP0.16Ò²¿ÉΪINT0ÍⲿÖжÏÒý½Å

  PINSEL->PIN_SEL0  |= (P0_3_EINT1 << P0_3_PINSEL); //Ñ¡ÔñP0.3ΪINT1ÍⲿÖжÏÒý½Å
  PINSEL->PIN_SEL0  |= (P0_14_EINT1 << P0_14_PINSEL); //Ñ¡ÔñP0.14Ò²¿ÉΪINT1ÍⲿÖжÏÒý½Å

  INTCON->EXT_POLAR   = ~(1 << EXTPOLAR0); //INT0ΪµÍµçƽÓÐЧ

  INTCON->EXT_POLAR  &= ~(1 << EXTPOLAR1); //INT1ΪµÍµçƽÓÐЧ

  INTCON->EXT_MODE    = (1 << EXTMODE0);  //ÉèÖÃINT0Ϊ±ßÑØ´¥·¢

  INTCON->EXT_MODE   &= ~(1 << EXTMODE1); //ÉèÖÃINT1Ϊµçƽ´¥·¢


/*-------------------------------------------------------------------------------------------
              FIQÖжϺÍIRQÖжϵÄÇø±ðÖ®´¦
FIQÖжϺÍIRQÖж϶¼ÊôÓÚ¿ÉÆÁ±ÎÖжϣ¬ËûÃÇ·Ö±ðÊÜCPSRµÄFºÍIλµÄ¿ØÖÆ¡£

ǰÕß²»Ðè¶ÔVIC->VectAddrsºÍVIC->VectCntls½øÐÐÉèÖ㬵«ÒªÏëÕýÈ·µØ
ÖжÏÒª×ö¼¸²½¹¤×÷£º
1. VIC->IntSelect   = (1 << VICIntSel_EINT0); //ÉèÖÃEINT0ΪFIQÖжÏ
2. VIC->IntEnable  |= (1 << VICIntSel_EINT0); //ʹÄÜEINT0ÖжÏ
3. ½¨Á¢FIQÖжϺ¯ÊýFIQ_EINT0().
   ×¢ÒâÒªÉùÃ÷ΪÍⲿµÄ¼´extern void FIQ_EINT0 (void) __irq
4. ¸ÄдStartup.SµÄÄÚÈÝ¡££¨¸ÄдºóµÄ×¢½â¼ûStartup.S£©

ºóÕßÐè¶ÔVIC->VectAddrsºÍVIC->VectCntls½øÐÐÉèÖ᣷½·¨£º
1. VIC->IntSelect  &= ~(1 << VICIntSel_EINT1); //ÉèÖÃEINT1ΪIRQÖжÏ
2. VIC->VectCntls[0] = VICIntSel_Enable | VICIntSel_EINT1;//ÉèÖÃÍⲿÖжÏ1·ÖÅäVIC×î¸ßÓÅÏȼ¶
   IRQ_EINT1;//ÉèÖÃÖжϷþÎñ³ÌÐòµØÖ·¼ûStartup_Table.S
   VIC->IntEnable  |= (1 << VICIntSel_EINT1); //ʹÄÜEINT1ÖжÏ
3. ½¨Á¢IRQÖжϺ¯ÊýIRQ_EINT1().
   ×¢ÒâÒªÉùÃ÷ΪÄÚ²¿µÄ¼´void IRQ_EINT1 (void) __irq
4. ±ØÐë¸ÄдStartup.SµÄÄÚÈÝ¡£
5. µ±VICÖжÏÏòÁ¿µØÖ·Î´¶¨Òå»ò³¬³öVIC->VectAddrs[15]ʱ£¬Ê¹ÓÃĬÈÏÖжÏÏòÁ¿VIC->DefVectAddr
   ÏòÁ¿(Êý×é)ÏòÁ¿ÓëĬÈÏÖжÏÏòÁ¿×î´óµÄ²»Í¬ÔÚÓÚÿ¸öÏòÁ¿Öж϶¼ÓÐ1¸öÖжϵØÖ·£¬¶øÄ¬ÈÏÖжÏÏòÁ¿
   Ö»Õ¼ÓÃ1¸ö¹«¹²µÄÖжϵØÖ·µ«¿É°üº¬¶à¸öÖжÏÔ´¡£¹ÊĬÈÏÖжÏÏòÁ¿±ØÐëÅбðÊÇij¸ö¾ßÌåµÄÖжÏÔ´¡£
   ËùÒÔÒ²¿ÉÒÔÈÏΪĬÈÏÖжÏÏòÁ¿ÊǵÚ17¸öÖжÏÏòÁ¿¡£
   ÌØ±ð×¢Òâ·ÇµäµÄĬÈÏÖжÏÏòÁ¿ÄÚ²»ÊÇÖжϵĵØÖ·¶øÊÇÐòºÅ16~31.
6. ·ÇµäÓë¾­µäµÄ×î´ó²»Í¬ÔÚÓÚǰÕßµÄVIC->VectAddrs[x]ÄÚ²»ÊǵØÖ·¶øÊÇÏòÁ¿Êý×éµÄÐòºÅ¡£
   ·ÇµäµÄÖжÏÏòÁ¿µØÖ·ÐèÒªÔÚStartup_Table.s¼´FLASHÄÚÉèÖá£
   ¶ø¾­µäµÄÖжÏÏòÁ¿µØÖ·ÐèÒªÔÚVIC->VectAddrs[x]»òVIC->DefVectAddr¼´RAMÄÚÉèÖÃÕæÕýµÄÖжÏÏòÁ¿µØÖ·¡£
--------------------------------------------------------------------------------------------*/

  VIC->IntSelect   = (1 << VICIntSel_EINT0); //ÉèÖÃEINT0ΪFIQÖжÏ

  VIC->VectCntls[0] = VICIntSel_Enable | VICIntSel_EINT1;//ÉèÖÃÍⲿÖжÏ1·ÖÅäVIC×î¸ßÓÅÏȼ¶
;  VIC->VectAddrs[0] = (unsigned int)IRQ_EINT1;//ÉèÖÃÖжϷþÎñ³ÌÐòµØÖ·
  VIC->IntEnable |= (1 << VICIntSel_EINT1);//ʹÄÜÍⲿÖжÏ1

  VIC->VectCntls[1] = VICIntSel_Enable | VICIntSel_SoftInt22;//ÉèÖÃÓû§Èí¼þÖжÏ
;  VIC->VectAddrs[1] = (unsigned int)IRQ_SOFT;//ÉèÖÃÓû§Èí¼þÖжϷþÎñ³ÌÐòµØÖ·
  VIC->IntEnable |= (1 << VICIntSel_SoftInt22);//ʹÄÜÓû§Èí¼þÖжÏ

  VIC->DefVectAddr = (unsigned int)31;//16~31¶¼¿É//¶¨Òå³ýVIC->VectAddrs[0]~VIC->VectAddrs[15]ÍâµÄÖжϺ¯Êý

  INTCON->EXT_INT = (1 << EINT0) //Çå³ýINT0ÖжϱêÖ¾
                  | (1 << EINT1) //Çå³ýINT1ÖжϱêÖ¾
                  | (1 << EINT2) //Çå³ýINT2ÖжϱêÖ¾
                  | (1 << EINT3);//Çå³ýINT3ÖжϱêÖ¾

  VIC->SoftIntClr = (1 << VICIntSel_EINT0) //Çå³ýEINT0ÈíÖжϱêÖ¾
                  | (1 << VICIntSel_EINT1) //Çå³ýEINT1ÈíÖжϱêÖ¾
                  | (1 << VICIntSel_EINT1) //Çå³ýEINT2ÈíÖжϱêÖ¾
                  | (1 << VICIntSel_EINT1);//Çå³ýEINT3ÈíÖжϱêÖ¾

  VIC->IntEnable  = (1 << VICIntSel_EINT0) //ʹÄÜEINT0ÖжÏ
                  | (1 << VICIntSel_EINT1);//ʹÄÜEINT1ÖжÏ

/*--------------------------------------------------------------------------
  ÏÂÁÐÑ­»·ÊǷǵäµÄ¾«»ªËùÔÚ£¬Æä˼·Çëµ½²ËµØµÄ[·ÇµäÐÍLPCARMÖ®¹¥·ÀÌåϵ]ÀïѰÕÒ¡£
user1/46/cmd.html?do=blogs&id=1240&uid=46

  ÆäËûÐèÒªStartup_Hot.sÖ§³Ö£¬ÒÔÅäºÏ·ÇµäµÄÀ¹½Ø¹¤×÷¡£
---------------------------------------------------------------------------*/
  for (i = 0;i <= 15; i ++) {
    VIC->VectAddrs[i] = i;//Ë¢ÐÂÏòÁ¿µØÖ·¼Ä´æÆ÷VICVectAddr0~VICVectAddr15
  }
 

  VIC->Protection = 1;//¹Ø±ÕÔÚÓû§¼¶¶ÔVICµÄһЩд²Ù×÷
  VIC->Protection = 0;//ÊÔͼÔÚÓû§¼¶´ò¿ª¶ÔVICµÄһЩд²Ù×÷µÄ±£»¤
  Enable_FIQ();//¿ª·Å¿ìËÙÖжÏ×Ü¿ª¹Ø
  VIC->SoftInt = (1 << VICIntSel_EINT0);//Èí¼þÄ£Äâ¿ìËÙÖжÏ0(ʧ°Ü£¡£¡£¡)
  __nop();
  Enable_VIC();//µÈÐ§ÎªÌØÈ¨¼¶µÄVIC->Protection = 0;
  VIC->SoftInt = (1 << VICIntSel_EINT0);//Èí¼þÄ£Äâ¿ìËÙÖжÏ0(³É¹¦£¡£¡£¡)
  __nop();

  VIC->SoftInt = (1 << VICIntSel_SoftInt22);//Èí¼þÄ£ÄâÓû§Èí¼þÖжÏ(ʧ°Ü£¡£¡£¡)

  Enable_IRQ();//×¢ÒâÏÖÔÚÁ¢¼´½øÈëEINT1Ó²¼þÖжϣ¨ÒòΪ¼Ù¶¨P0.3/P0.14¶¼Îª¸ßµçƽ£©
  VIC->SoftInt = (1 << VICIntSel_SoftInt22);//Èí¼þÄ£ÄâÓû§Èí¼þÖжÏ(³É¹¦£¡£¡£¡)

  VIC->SoftInt = (1 << VICIntSel_EINT1);//Èí¼þÄ£ÄâÏòÁ¿ÖжÏ1(³É¹¦£¡£¡£¡)

  VIC->Protection = 1;//¹Ø±ÕÔÚÓû§¼¶¶ÔVICµÄһЩд²Ù×÷
  VIC->Protection = 0;;//ÔÚÓû§¼¶ÊÔͼд'0'ÎÞЧ!!!Ó¦¸ÃÓÃEnable_VIC();»òSetVICProtection(0);
  while(i == 0) {//²»»á½øÈëËÀÑ­»·
    __nop();
  }
 
  i = SetVICProtection(0);//½øÈëÌØÈ¨¼¶´ò¿ª¶ÔVICµÄһЩд²Ù×÷µÄ±£»¤

  VIC->IntEnable |= (1 << VICIntSel_SoftInt23);//ʹÄÜ·Ç·¨Óû§Èí¼þÖжÏ
  VIC->IntEnable |= (1 << VICIntSel_SoftInt24);//ʹÄÜ·Ç·¨Óû§Èí¼þÖжÏ
  VIC->IntEnable |= (1 << VICIntSel_SoftInt25);//ʹÄÜ·Ç·¨Óû§Èí¼þÖжÏ
  VIC->IntEnable |= (1 << VICIntSel_SoftInt26);//ʹÄÜ·Ç·¨Óû§Èí¼þÖжÏ

  Disable_IRQ();//¹Ø±ÕÏòÁ¿ÖжÏ×Ü¿ª¹Ø
  PINSEL->PIN_SEL0  |= (P0_7_EINT2 << P0_7_PINSEL);   //Ñ¡ÔñP0.7ΪINT2ÍⲿÖжÏÒý½Å
  INTCON->EXT_POLAR  &= ~(1 << EXTPOLAR2); //INT2ΪµÍµçƽÓÐЧ
  INTCON->EXT_MODE   |=  (1 << EXTMODE2); //ÉèÖÃINT2Ϊ±ßÑØ´¥·¢
//  INTCON->EXT_MODE   &= ~(1 << EXTMODE2); //ÉèÖÃINT2Ϊµçƽ´¥·¢
  VIC->IntEnable |= (1 << VICIntSel_EINT2);//ʹÄÜ·Ç·¨ÍⲿÖжÏ2
/*----------------------------------------------------------------------------------------------
ÒÔϼ¸¾äÒý·¢·Ç·¨Óû§Èí¼þÖжϺóVIC->VectAddrֵΪVIC->DefVectAddr£¬¹Ê³ÌÐò·ÉÈëIRQ_Default()´¦Ö´ÐС£
-----------------------------------------------------------------------------------------------*/
  VIC->SoftInt = (1 << VICIntSel_SoftInt23);//Èí¼þÄ£Äâ·Ç·¨Óû§Èí¼þÖжÏ(³ÌÐò·É)
  VIC->SoftInt = (1 << VICIntSel_SoftInt24);//Èí¼þÄ£Äâ·Ç·¨Óû§Èí¼þÖжÏ(³ÌÐò·É)
  VIC->SoftInt = (1 << VICIntSel_SoftInt25);//Èí¼þÄ£Äâ·Ç·¨Óû§Èí¼þÖжÏ(³ÌÐò·É)
  VIC->SoftInt = (1 << VICIntSel_SoftInt26);//Èí¼þÄ£Äâ·Ç·¨Óû§Èí¼þÖжÏ(³ÌÐò·É)
  VIC->SoftInt = (1 << VICIntSel_EINT2);//Èí¼þÄ£Äâ·Ç·¨INT2Èí¼þÖжÏ(³ÌÐò·É£¡£¡£¡)

  INTCON->EXT_INT = (1 << EINT2);//Çå³ý·Ç·¨INT2ÖжϱêÖ¾
  VIC->SoftIntClr = (1 << VICIntSel_EINT2);//Çå³ý·Ç·¨INT2Èí¼þÖжϱêÖ¾

  Enable_IRQ();//¿ª·ÅÏòÁ¿ÖжÏ×Ü¿ª¹Ø

  VIC->Protection = 1;//¹Ø±ÕÔÚÓû§¼¶¶ÔVICµÄһЩд²Ù×÷,±£»¤ÔÚÓû§¼¶VIC²»±»ÒÔÍâ¸Äд
  while(i == 0) {//½øÈëËÀÑ­»·
    __nop();
  }
}

ϵͳ·ÖÀà: ARM
Óû§·ÖÀà: ¿ªÔ´Îļþ°ü
±êÇ©: ÎÞ±êÇ©
À´Ô´: Ô­´´
·¢±íÆÀÂÛ ÔĶÁÈ«ÎÄ(670) | »Ø¸´(0)

0

¹ØÓÚͶƱ
LPCARMÖжϷ½·¨´óȫʥµ®Âã±¼³ÌÐòÏê½â(¸üÐÂ)
LPCARMÖжϷ½·¨´óȫʥµ®Âã±¼³ÌÐòÏê½â(¸üÐÂ)
ÑãËþ²ËÅ© ·¢±íÓÚ 2006-12-24 16:35:00
 
/*----------------------------------------------------------------------------------
          LPCARMÖжϷ½·¨´óȫʥµ®Âã±¼³ÌÐòÏê½â(¸üÐÂ)
ÑãËþ²ËÅ©HotPower   2006.12.25 ¸üÐÂÓڲ˵ØHttp://HotPower.21ic.org/
----------------------------------------------------------------------------------*/
££i nclude     //ARM²ËÄñHotPower´´½¨¶¨ÒåÎļþ(×îÐÂΪµ¹Ëú°æ)
/*---------------------------------------------------------------------------------
×¢Ò⣺
LPC213XDEF.HÎļþÇëÔÚuser1/46/archives/2006/16994.htmlÏÂÔØ
¿É½«LPC213XDEF.H¿½±´µ½Keil\ARM\INC\PHILIPSĿ¼ÏÂ
 
µã»÷ÏÂÔØ±¾Âã±¼¹¤³Ì°ü:uploadfile-/2006-12/1225492675.rar
----------------------------------------------------------------------------------*/


void __swi(0) Enable_IRQ(void);
void __SWI_0            (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    BIC tmp, tmp, #0x80
    MSR SPSR_c, tmp
  }
}

void __swi(1) Disable_IRQ(void);
void __SWI_1             (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    ORR tmp, tmp, #0x80
    MSR SPSR_c, tmp
  }
}

void __swi(2) Enable_FIQ(void);
void __SWI_2            (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    BIC tmp, tmp, #0x40
    MSR SPSR_c, tmp
  }
}

void __swi(3) Disable_FIQ(void);
void __SWI_3             (void) {
int tmp;
  __asm
  {
    MRS tmp, SPSR
    ORR tmp, tmp, #0x40
    MSR SPSR_c, tmp
  }
}

void __swi(4) Enable_VIC(void);
void __SWI_4            (void) {
  VIC->Protection = 0;//¿ª·Å¶ÔVICµÄдÈë±£»¤
}

/*-------------------------------------------------------------
  SWIÖжϺÍVICSoftIntÈí¼þÖжϵÄÇø±ðÖ®´¦

  ÓÉÓÚVIC->Protection¿ÉÒÔÔÚÈκμ¶±ðËæÒâÖÃ'1'£¬¼´¹Ø±Õ
¶ÔVICµÄдÈ룬¹Êû±ØÒª¹¹ÔìDisable_VIC();
  ÒÔϺ¯ÊýSetVICProtection()Ö»ÊÇ˵Ã÷SWIÖжϺÍVICSoftIntÈí¼þ
ÖжϵÄÇø±ð£¬¼´Ç°ÕßÊôÓÚ·ÇÆÁ±ÎÖжϣ¬ÇÒ¿É´ø²ÎÊýºÍ·µ»ØÖµ¡£
¶øºóÕߺÍÊôÓÚ¿ÉÆÁ±ÎÖжϣ¬ÓëVICÖжÏÒ»Ñù£¬ÎÞ²ÎÊýºÍ·µ»ØÖµ¡£
µ«VICSoftIntÈí¼þÖжÏÓбðÓÚÄ£¿éµÄVICÖжϡ£Ëü¿É×Ô×éÖжϣ¬Ò²¿É
Ä£Äâϵͳģ¿éÖжϡ£
  Á½Õß¶¼ºÜÁé»î£¬µ«ÓÃ;ºÍ·½·¨ÓкܴóµÄ²îÒì¡£
SWIÖжϸĽøµÄ×¢½â¼ûSWI.sºÍSWI_Table.s.·ñÔò²»ÄÜÕýÈ·¿ª¹ØFIQ/IRQ
--------------------------------------------------------------*/
unsigned int __swi(5) SetVICProtection(unsigned int val);
unsigned int __SWI_5                  (unsigned int val) {
  VIC->Protection = val;//VIC->Protection¿ÉÒÔËæÒâÖÃ'1',µ«Çå'0'±ØÐëÔÚ¹ÜÀíģʽÏÂ
  return VIC->Protection;
}

extern void FIQ_EINT0 (void) __irq
{
  VIC->SoftIntClr = (1 << VICIntSel_EINT0);//ÔöÇ¿°²È«ÐÔ
  INTCON->EXT_INT = (1 << EINT0);    //Çå³ýINT0ÖжϱêÖ¾
  VIC->VectAddr = 0;
}

void IRQ_EINT1 (void) __irq
{
  VIC->SoftIntClr = (1 << VICIntSel_EINT1);;//ÔöÇ¿°²È«ÐÔ
  while(INTCON->EXT_INT & (1 << EINT1)) {//µÈ´ýP0_3ºÍP0_14¶¼ÎªµÍµçƽ
    INTCON->EXT_INT = (1 << EINT1);//Çå³ýINT1ÖжϱêÖ¾(µçƽ´¥·¢±ØÐë¶ÁºóÇå³ý!!!)
  }
  VIC->VectAddr = 0;
}

void IRQ_SOFT (void) __irq
{
  VIC->SoftIntClr = (1 << VICIntSel_SoftInt22);//Çå³ýÓû§Èí¼þÖжϱêÖ¾
  VIC->VectAddr = 0;
}

void IRQ_Default (void) __irq
{
  switch(VIC->IRQStatus) {
    case (1 << VICIntSel_EINT0)://À¹½Ø·Ç·¨INT0ÖжÏ
      INTCON->EXT_INT = (1 << EINT0);//Çå³ý·Ç·¨INT0ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT0);//Çå³ý·Ç·¨INT0Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_EINT1)://À¹½Ø·Ç·¨INT1ÖжÏ
      INTCON->EXT_INT = (1 << EINT1);//Çå³ý·Ç·¨INT1ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT1);//Çå³ý·Ç·¨INT1Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_EINT2)://À¹½Ø·Ç·¨INT2ÖжÏ
      INTCON->EXT_INT = (1 << EINT2);//Çå³ý·Ç·¨INT2ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT2);//Çå³ý·Ç·¨INT2Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_EINT3)://À¹½Ø·Ç·¨INT3ÖжÏ
      INTCON->EXT_INT = (1 << EINT3);//Çå³ý·Ç·¨INT2ÖжϱêÖ¾
      VIC->SoftIntClr = (1 << VICIntSel_EINT3);//Çå³ý·Ç·¨INT3Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt23)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt23
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt23);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt24)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt24
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt24);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt25)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt25
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt25);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    case (1 << VICIntSel_SoftInt26)://À¹½Ø·Ç·¨Óû§Èí¼þÖжÏVICIntSel_SoftInt26
      VIC->SoftIntClr = (1 << VICIntSel_SoftInt26);//Çå³ý·Ç·¨Óû§Èí¼þÖжϱêÖ¾
      break;
    default:
      VIC->SoftIntClr = 0xffffff;//Çå³ýËùÓзǷ¨Óû§Èí¼þÖжϱêÖ¾
  }
  VIC->VectAddr = 0;
}

int main(void)
{
unsigned int i;

  Disable_IRQ();
  Disable_FIQ();

  VIC->IntEnable  = 0;//¹Ø±ÕÈ«²¿ÖжÏ
  VIC->SoftIntClr = 0xffffffff;//Çå³ýËùÓÐÈíÖжϱêÖ