AnsweredAssumed Answered

STM8S003F3P6 UART1 and EXTERNAL INTERRUPT ISSUE..

Question asked by Chayan Roy on Jan 2, 2018
Latest reply on Jan 2, 2018 by Chayan Roy

Hello EveryOne,

I am  doing some coding on STM8S003F3P6 , for wifi and IR communication.  IR sensor is attached on PORTD.1,with external interrupt enabled for this pin. And Wifi TX is connected to RX of STM8S003F3P6. My problem is when I am attaching the IR Sensor to PORTD.1, UART1.RX doesn't work,but I remove the IR sensor,UART1.RX works as expected.

First I thought there may be some hardware issue.But checked with IR sensor connected and external interrupt disabled for this pin, UART1.RX works. I don't know what is going on. I am trying my level best to solve this issue. Kindly  if anyone has any clue or solution,let me know. Thanks

 

 

 

Here, wifi is sending data to the controller through UART communication. And for IR the RC5 decoding is done with the external interrupt.

 

 

Complete code:

 

#include "STM8S003F3P.h"

 

#define SHORT_MIN  444
#define SHORT_MAX  900
#define LONG_MIN 900
#define LONG_MAX 1600

 

#define STATE_START1  0
#define STATE_MID1    1
#define STATE_MID0    2
#define STATE_START0  3
#define STATE_BEGIN   4
#define STATE_ERROR   5

 


void InitialiseSystemClock(void);
void RC5_Init(void);
void commandapply(void);
void RC5reset(void);
void MemoryWrite(void);
void MemoryRead(void);
void delay_ms(unsigned int x);
void UART1_Initialize(void);
void UART1_TX_Init(void);
void UART1_Print(unsigned char * message);

 

 

 

unsigned int time=0,command,delay=0,t,previousbit;
unsigned char EdgeNumber=0,x;
 unsigned char trans[4] = {0x01, 0x91, 0x9b, 0xfb};
 volatile char state,newstate;
 unsigned char event=1;
 unsigned char duty[5]={20,18,15,12,8 };
 unsigned char counter=14,k,i,j,flag=0;
 unsigned char COUNT=1,FAN_STATUS=0,LIGHT_STATUS1=0,LIGHT_STATUS2=0,LIGHT_STATUS3=0,LIGHT_STATUS4=0,CURRENT_STATUS1=0,PREVIOUS_STATUS1=0,CURRENT_STATUS2=0,PREVIOUS_STATUS2=0,CURRENT_STATUS3=0,PREVIOUS_STATUS3=0,CURRENT_STATUS4=0,PREVIOUS_STATUS4=0,CURRENT_STATUS5=0,PREVIOUS_STATUS5=0;
 
  unsigned char *ptr1=(unsigned char *)0x4010;
  unsigned char *ptr2=(unsigned char *)0x4011;
    unsigned char *ptr3=(unsigned char *)0x4012;
        unsigned char *ptr4=(unsigned char *)0x4013;
        unsigned char *ptr5=(unsigned char *)0x4014;
        unsigned char *ptr6=(unsigned char *)0x4015;
            unsigned char *ptr7=(unsigned char *)0x4016;
            unsigned char *ptr8=(unsigned char *)0x4017;
                        unsigned char *ptr9=(unsigned char *)0x4018;
                        unsigned char *ptr10=(unsigned char *)0x4019;
                            unsigned char *ptr11=(unsigned char *)0x4020;

 

    void delay_ms(unsigned int x){
    
    unsigned int P;
        for(P=0;P<=x;P++);
    
    }
void UART1_Initialize(void){

 


UART1_CR1=(0<<4);
UART1_CR1=(0<<2);
UART1_CR3=(0<<4)|(0<<5);
UART1_BRR2=0X0a;
UART1_BRR1=0x08;

 

UART1_CR2=(1<<5);
UART1_CR2=(1<<2);

 

 

 

}
void UART1_Print(unsigned char * message){

 

char *ch = message;

 

while (*ch)
{

 

UART1_DR = (unsigned char) *ch;     //  Put the next character into the data transmission register.

 

while (!(UART1_SR & (1<<7)));          //  Wait for transmission to complete.

 

ch++;                               //  Grab the next character.

 

}

 

}
void main(void){

 

unsigned char temp;

 

                   InitialiseSystemClock();
                                      UART1_Initialize();
                                MemoryRead();            

 

    
                    PD_DDR &=~(1<<6);
                                    
    
    
                  
                                 /* SWITCH PORT */
                                
                                PB_DDR &=~(1<<4);
                                 PB_CR2 |=(1<<4);
                                
                                  PB_DDR &=~(1<<5);
                                 PB_CR2 |=(1<<5);
                                
                                 PA_DDR &=~(1<<1);
                                 PA_CR2 |=(1<<1);
                                
                                 PA_DDR &=~(1<<2);
                                 PA_CR2 |=(1<<2);
                                
                                 PA_DDR &=~(1<<3);
                                 PA_CR2 |=(1<<3);
                                
                                
                                
                                

 

                 /*FAN PORT */
                                 PC_DDR |=(1<<5);
                                 PC_CR1 |=(1<<5);
                                 PC_CR2 |=(1<<5);
                                
                                 PC_DDR |=(1<<6);
                                 PC_CR1 |=(1<<6);
                                 PC_CR2 |=(1<<6);
                                
                                 PC_DDR |=(1<<4);
                                 PC_CR1 |=(1<<4);
                                 PC_CR2 |=(1<<4);
                                
                    
                            
                                 /* LIGHT PORT */
                                 PC_DDR |=(1<<7);
                                 PC_CR1 |=(1<<7);
                                 PC_CR2 |=(1<<7);
                                
                                  
                                 PC_DDR |=(1<<3);
                                 PC_CR1 |=(1<<3);
                                 PC_CR2 |=(1<<3);
                                
                               PD_DDR |=(1<<2);
                                 PD_CR1 |=(1<<2);
                                 PD_CR2 |=(1<<2);
                                
                                 PD_DDR |=(1<<3);
                                 PD_CR1 |=(1<<3);
                                 PD_CR2 |=(1<<3);
                                
                            
                                
                                 EXTI_CR1=0b11001111;
                                
                                 PD_ODR &=~(1<<2);
                                  PD_ODR &=~(1<<3);
                                     PC_ODR &=~(1<<3);
                                      PC_ODR &=~(1<<4);
                                         PC_ODR &=~(1<<5);
                                          PC_ODR &=~(1<<6);
                                             PC_ODR &=~(1<<7);
                                
                            

 

                RC5_Init();
                                                            
               
                                                                
                                                                    
                                                                if(LIGHT_STATUS1==1){
                                                                delay_ms(1000);
                                                        PC_ODR |=(1<<7);
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS1==0){
                                                                PC_ODR &=~(1<<7);
                                                            
                                                            
                                                            }
                                                                if(LIGHT_STATUS2==1){
                                                                
                                                                delay_ms(1000);
                                                                PC_ODR |=(1<<3);
                                                                
                                                                
                                                                }
                                                        if(LIGHT_STATUS2==0){
                                                            
                                                            PC_ODR &=~(1<<3);
                                                        }
                                                            
                                                            
                                                                if(LIGHT_STATUS3==1){
                                                                    delay_ms(1000);
                                                                PD_ODR |=(1<<2);
                                                            
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS3==0){
                                                                PD_ODR &=~(1<<2);
                                                            
                                                            
                                                            }
                                                                if(LIGHT_STATUS4==1){
                                                                delay_ms(1000);
                                                                    PD_ODR |=(1<<3);
                                                                    
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS4==0){
                                                                PD_ODR &=~(1<<3);
                                                                (1<<3);
                                                    
                                                            
                                                            }
    
                                                                                                                    if(FAN_STATUS==1){
                             
                    
                 if(COUNT==1){
                 delay_ms(1000);
                 PC_ODR |=(1<<5);
                 PC_ODR &=~(1<<4);
                  PC_ODR &=~(1<<6);
                    
                 }
             if(COUNT==2){
              delay_ms(1000);
             PC_ODR  &=~(1<<5);
             PC_ODR |=(1<<4);
             PC_ODR &=~(1<<6);
            
            
             }
         if(COUNT==3){
         delay_ms(1000);
         PC_ODR |=(1<<4);
         PC_ODR |=(1<<5);
         PC_ODR &=~(1<<6);
        
        
         }
     if(COUNT==4){
     delay_ms(1000);

 

     PC_ODR &=~(1<<4);
     PC_ODR &=~(1<<5);
     PC_ODR |=(1<<6);
    
    
     COUNT=4;
     }
}
if(FAN_STATUS==0){

 

PC_ODR &=~(1<<4);
PC_ODR &=~(1<<5);
PC_ODR &=~(1<<6);

 


}
                                        

 


                 _asm("rim");
                   
                                 while(1){
                                             
                                            
                                
                                            while(!(UART1_SR & (1<<5)));
                                temp=UART1_DR;
                                
                                    if(temp==0x07){
                
                        PC_ODR  &=~(1<<5);
             PC_ODR &=~(1<<4);
             PC_ODR &=~(1<<6);
                    }
                    if(temp==0x01){
                PC_ODR ^=(1<<7);
                    
                    }
                        if(temp==0x06){
                PC_ODR ^=(1<<3);
                    
                    }
                        if(temp==0x02){
        PC_ODR |=(1<<5);
                 PC_ODR &=~(1<<4);
                  PC_ODR &=~(1<<6);
                    
                    }
                            
    if(temp==0x03){
                PC_ODR  &=~(1<<5);
             PC_ODR |=(1<<4);
             PC_ODR &=~(1<<6);
                    
                    }
                        if(temp==0x04){
             PC_ODR |=(1<<4);
         PC_ODR |=(1<<5);
         PC_ODR &=~(1<<6);
                    
                    }
                        
                                if(temp==0x05){
          PC_ODR &=~(1<<4);
           PC_ODR &=~(1<<5);
            PC_ODR |=(1<<6);
                    
                    }
                                    
            
                                 }

 


}

 

 

 

void MemoryRead(void){

 

unsigned char b,c;
if(!(FLASH_IAPSR & (1<<3))){
                            
                            FLASH_DUKR=0XAE;
                            FLASH_DUKR=0X56;
                            
                            FAN_STATUS=*ptr1;
                            COUNT=*ptr2;
                            LIGHT_STATUS1=*ptr3;
                            LIGHT_STATUS2=*ptr4;
                            LIGHT_STATUS3=*ptr5;
                            LIGHT_STATUS4=*ptr6;
                            PREVIOUS_STATUS1=*ptr7;
                            PREVIOUS_STATUS2=*ptr8;
                                PREVIOUS_STATUS3=*ptr9;
                                PREVIOUS_STATUS4=*ptr10;
                                PREVIOUS_STATUS5=*ptr11;
                            FLASH_IAPSR &=~(1<<3);

 

                        
                        
                            }

 


}

 

 

 

void MemoryWrite(void){

 

if(!(FLASH_IAPSR & (1<<3))){
                            
                            FLASH_DUKR=0XAE;
                            FLASH_DUKR=0X56;
                            
                        
                        
                        *ptr1=FAN_STATUS;
                        *ptr2=COUNT;
                        *ptr3=LIGHT_STATUS1;
                        *ptr4=LIGHT_STATUS2;
                        *ptr5=LIGHT_STATUS3;
                        *ptr6=LIGHT_STATUS4;
                        *ptr7=PREVIOUS_STATUS1;
                        *ptr8=PREVIOUS_STATUS2;
                        *ptr9=PREVIOUS_STATUS3;
                        *ptr10=PREVIOUS_STATUS4;
                        *ptr11=PREVIOUS_STATUS5;
                        
                        
                            
                            FLASH_IAPSR &=~(1<<3);
                            
                        
                            
                            }
                            
                
return;

 

}

 


            @far @interrupt void TIMER4_INTERRUPT (void){
                
                
            
            }
 @far @interrupt void TIMER1_INTERRUPT (void){
 
    
 
 return;
 
 }
               @far @interrupt void TIMER2_INTERRUPT (void){
                  
                                    time++;

 

                   TIM2_SR1 &=~(1<<0);
                      return;

 

}

 


           @far @interrupt void PortC_external_interrupts (void){
                                
                            
                        
            
                                 }
           
                      @far @interrupt void PortB_external_interrupts (void){
                       
                                
                                    
                                
            
                        if(PB_IDR & (1<<4)){
                        
                        CURRENT_STATUS1=1;
                        
                        
                        
                        }
                        else{
                        
                if(!(PB_IDR & (1<<4))){
                
                CURRENT_STATUS1=0;
                
                }
                        
                        
                        }
                            
                        if(PREVIOUS_STATUS1 !=CURRENT_STATUS1){
                        
                        delay_ms(1000);
                        PC_ODR^=(1<<7);
                        LIGHT_STATUS1^=1;
                        
                        
        
                        
                        }
                            PREVIOUS_STATUS1=CURRENT_STATUS1;
                            
                            
                        if(PB_IDR & (1<<5)){
                        
                        CURRENT_STATUS2=1;
                        
                        
                        
                        }
                        else{
                        
                if(!(PB_IDR & (1<<5))){
                
                CURRENT_STATUS2=0;
                
                }
                        
                        
                        }
                            
                        if(PREVIOUS_STATUS2 !=CURRENT_STATUS2){
                        
                            delay_ms(1000);
                        PD_ODR^=(1<<1);
                        LIGHT_STATUS2^=1;
                    
                        
        
                        
                        }
                            PREVIOUS_STATUS2=CURRENT_STATUS2;
                
                            
                            
                                MemoryWrite();
                        return;
            
                                 }
                    
                                 @far @interrupt void PortA_external_interrupts (void){
                                
                                    if(PA_IDR & (1<<1)){
                        
                        CURRENT_STATUS3=1;
                        
                        
                        
                        }
                        else{
                        
                if(!(PA_IDR & (1<<1))){
                
                CURRENT_STATUS3=0;
                
                }
                        
                        
                        }
                            
                        if(PREVIOUS_STATUS3 !=CURRENT_STATUS3){
                        
                        delay_ms(1000);
                        PD_ODR^=(1<<2);
                        LIGHT_STATUS3^=1;
                        
        
                        
                        }
                            PREVIOUS_STATUS3=CURRENT_STATUS3;
                            
                            
                            /*---------------------------------*/
                            
                                                if(PA_IDR & (1<<2)){
                        
                        CURRENT_STATUS4=1;
                        
                        
                        
                        }
                        else{
                        
                if(!(PA_IDR & (1<<2))){
                
                CURRENT_STATUS4=0;
                
                }
                        
                        
                        }
                            
                        if(PREVIOUS_STATUS4 !=CURRENT_STATUS4){
                        
                        delay_ms(1000);
                        PD_ODR^=(1<<3);
                        LIGHT_STATUS4^=1;
                        
                        
        
                        
                        }
                            PREVIOUS_STATUS4=CURRENT_STATUS4;
                            
                            
                            
                            /*---------------------------------------*/
                                                        if(PA_IDR & (1<<3)){
                        
                        CURRENT_STATUS5=1;
                        
                        
                        
                        }
                        else{
                        
                if(!(PA_IDR & (1<<3))){
                
                CURRENT_STATUS5=0;
                
                }
                        
                        
                        }
                            
                        if(PREVIOUS_STATUS5 !=CURRENT_STATUS5){
                        
                        FAN_STATUS^=1;
            
                 RC5reset();
                        
                        }
                            PREVIOUS_STATUS5=CURRENT_STATUS5;
                            
                            
                                                                                                
                            
                            MemoryWrite();
                            
                            
                            return;
                        
            
                                 }
                    @far @interrupt void PortD_external_interrupts (void){
                                            
                                        PD_ODR ^=(1<<6);

 

                      TIM2_CR1=(1<<0);

 

                           delay=time;

 

                      
                                             if(state==STATE_BEGIN){

 


                       counter--;
                    command |=1<<counter;
                  
                                    state=STATE_MID1;

 

                     delay=0;

 

                    time=0;
               
                                  TIM2_CR1=(1<<0);

 

                       return;

 

}

 

 

 


                if((PD_IDR & (1<<4))){
                 
                                 event=2;
                   
                                     }else{
               
                             if(!(PD_IDR & (1<<4)))
              
                            event=0;

 

}

 

                 if(delay>LONG_MIN & delay<LONG_MAX){
    

 

                     event=event+4;

 

}

 

               else if(delay < SHORT_MIN || delay > SHORT_MAX)
    {
        /* If delay wasn't long and isn't short then
         * it is erroneous so we need to reset but
         * we don't return from interrupt so we don't
         * loose the edge currently detected. */
        RC5reset();
                return;
            }

 

                   newstate = (trans[state]>>event) & 0x03;

 

                            state=newstate;

 

         if(state == STATE_MID0)
       {
        
                counter--;
         }
           
                     else{
                  if(state==STATE_MID1){
                            
                                                        counter--;
                         
                                                 command |=1<<counter;

 

                               time=0;

 

                                   }
                                       }

 

 

 

                            if(counter==0 && (state==STATE_START1 || state==STATE_MID0)){
                               

 

                                         PD_CR2 &=~(1<<4);
                                       
                                                                             commandapply();

 

                                      }

 


                                       time=0;
                                     
                                                                           delay=0;

 

                               return;

 


                                 }

 

 

 

void commandapply(void){
                      
                                        
                                        t=command &0x800;
               
                                   if(x==0){

 

                       previousbit=t;
                             x=1;
                        
                                                }
                if(t !=previousbit){
                                    
                                    
                                    /*All OFF */
                     if(command==0b11001101000100){
                                                                PD_ODR &=~(1<<3);
                                                                PD_ODR &=~(1<<2);
                                                                PC_ODR &=~(1<<3);
                                                                PC_ODR &=~(1<<7);
                                                    LIGHT_STATUS1=0;
                                        LIGHT_STATUS2=0;
                                        LIGHT_STATUS3=0;
                                        LIGHT_STATUS4=0;
                                        
                                                FAN_STATUS=0;
                                                                
                        }
                if(command==0b11101101000100){
                                                  PD_ODR &=~(1<<3);
                                                                PD_ODR &=~(1<<2);
                                                                PC_ODR &=~(1<<3);
                                                                PC_ODR &=~(1<<7);
                                                    
                                        LIGHT_STATUS1=0;
                                        LIGHT_STATUS2=0;
                                        LIGHT_STATUS3=0;
                                        LIGHT_STATUS4=0;
                                                FAN_STATUS=0;
                                                         }
/*F ON/OFF */
                     if(command==0b11001101101001){
                                            
                                        
                                                FAN_STATUS^=1;
                                                                
                        }
                if(command==0b11101101101001){
                                
                               
                                    FAN_STATUS^=1;
                                                         }
                                                        
                                                        
                                                         /*L1 On-Off */                                                
                                                            if(command==0b11001101100010){
                                        
                                        LIGHT_STATUS1^=1;
                                            if(LIGHT_STATUS1==1){
                                                                delay_ms(1000);
                                                        PC_ODR |=(1<<7);
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS1==0){
                                                                PC_ODR &=~(1<<7);
                                                            
                                                            
                                                            }
                                        
                                                                
                        }
                if(command==0b11101101100010){
                                                                        

 

                                    
                              LIGHT_STATUS1^=1;
                                   if(LIGHT_STATUS1==1){
                                                                delay_ms(1000);
                                                        PC_ODR |=(1<<7);
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS1==0){
                                                                PC_ODR &=~(1<<7);
                                                            
                                                            
                                                            }
                                                         }
                                                        
                                                         /*L2 On-Off */                                                
                                                            if(command==0b11001101010001){
                                            
                                        LIGHT_STATUS2^=1;
                                          
                                                        if(LIGHT_STATUS2==1){
                                                                
                                                                delay_ms(1000);
                                                                PC_ODR |=(1<<3);
                                                                
                                                                
                                                                }
                                                        if(LIGHT_STATUS2==0){
                                                            
                                                            PC_ODR &=~(1<<3);
                                                        }
                                                            
                                                                
                        }
                if(command==0b11101101010001){
                                    
                        
                                                         LIGHT_STATUS2^=1;
                                  if(LIGHT_STATUS2==1){
                                                                
                                                                delay_ms(1000);
                                                                PC_ODR |=(1<<3);
                                                                
                                                                
                                                                }
                                                        if(LIGHT_STATUS2==0){
                                                            
                                                            PC_ODR &=~(1<<3);
                                                        }
                                                            
                                                            
                                                         }
                                                        
        /*L3 On-Off */                                                
                                                            if(command==0b11001101101011){
                                            
                                        LIGHT_STATUS3^=1;
                                              if(LIGHT_STATUS3==1){
                                                                    delay_ms(1000);
                                                                PD_ODR |=(1<<2);
                                                            
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS3==0){
                                                                PD_ODR &=~(1<<2);
                                                            
                                                            
                                                            }
                                                        
                                                                
                        }
                if(command==0b11101101101011){
                                    
                                    LIGHT_STATUS3^=1;
                             if(LIGHT_STATUS3==1){
                                                                    delay_ms(1000);
                                                                PD_ODR |=(1<<2);
                                                            
                                                                
                                                                
                                                                }
                                                            if(LIGHT_STATUS3==0){
                                                                PD_ODR &=~(1<<2);
                                                            
                                                            
                                                            }
                                                    
                                  
                                                         }
/* L4 ON?OFF */
                if(command==0b11001101000011){
                                    delay_ms(1000);
                                                    LIGHT_STATUS4^=1;
                                            if(LIGHT_STATUS4==1){
                                            
                                                                                            PD_ODR |=(1<<3);
}
                                                    
    
        
                         }
                                             if(LIGHT_STATUS4==0){
                                             PD_ODR &=~(1<<3);
                                            
                                             }
               if(command==0b11101101000011){
                                          delay_ms(1000);
                                
                                 LIGHT_STATUS4^=1;
                             if(LIGHT_STATUS4==1){
                            
                             PD_ODR |=(1<<3);
                             }
                if(LIGHT_STATUS4==0){
                    PD_ODR &=~(1<<3);
                
                }
                   
                            
                        }
/* F++ */
         
                 if(command==0b11001101011110){
                    
                    COUNT++;
     if(COUNT>=4){
    
    
    
     COUNT=4;
     }
 

 

        }
          if(command==0b11101101011110){
            
            
                     COUNT++;
     if(COUNT>=4){
    
    
    
     COUNT=4;
     }
 
        
                
                

 


     }
/* F-- */
             if(command==0b11001101001111){
          
                                                 COUNT--;    
                                            if(COUNT<=1){
                                            COUNT=1;
                                            
                                            }
                

 

              }
                 if(command==0b11101101001111){

 

       
                                
                                    
                                        COUNT--;    
                                            if(COUNT<=1){
                                            COUNT=1;
                                            
                                            }
                                    
                                    

 


             }
                 previousbit=t;
}

 

                 TIM2_CR1 &=~(1<<0);
                    flag=1;
                                            MemoryWrite();
                                        RC5reset();
}
void RC5_Init(void){

 


                      PD_DDR &=~(1<<4);
                     
                      PD_CR2 |=(1<<4);

 

 

 

                         TIM2_PSCR=16;
                          TIM2_ARRH=0X00;
                         TIM2_ARRL=0X01;
                              TIM2_IER=(1<<0);

 

                                counter=14;

 

                                  command=0;

 


                                                                        

 


                                     state=STATE_BEGIN;
      }

 

                  void RC5reset(void){
                                PD_CR2 |=(1<<4);

 

 

 


                                      command=0;

 

                                     state=STATE_BEGIN;

 

                                         counter=14;
                                                                                  if(FAN_STATUS==1){
                             
                    
                 if(COUNT==1){
                     delay_ms(1000);
                 PC_ODR |=(1<<5);
                 PC_ODR &=~(1<<4);
                  PC_ODR &=~(1<<6);
                
                 }
             if(COUNT==2){
                  delay_ms(1000);
             PC_ODR  &=~(1<<5);
             PC_ODR |=(1<<4);
             PC_ODR &=~(1<<6);
        
             }
         if(COUNT==3){
         delay_ms(1000);
         PC_ODR |=(1<<4);
         PC_ODR |=(1<<5);
         PC_ODR &=~(1<<6);
        
         }
     if(COUNT==4){
      delay_ms(1000);
     PC_ODR &=~(1<<4);
     PC_ODR &=~(1<<5);
     PC_ODR |=(1<<6);
    
     COUNT=4;
     }
}
if(FAN_STATUS==0){

 

PC_ODR &=~(1<<4);
PC_ODR &=~(1<<5);
PC_ODR &=~(1<<6);

 


}
                            

 


                                        }
                                                                                
                                                                                
                                                                                
              void InitialiseSystemClock(void)
                         {
                            CLK_ICKR = 0;                       //  Reset the Internal Clock Register.
                               CLK_ICKR = (1<<0);;                 //  Enable the HSI.
                            CLK_ECKR = 0;                       //  Disable the external clock.
                             while (!(CLK_ICKR & (1<<1)));       //  Wait for the HSI to be ready for use.
                               CLK_CKDIVR = 0;                     //  Ensure the clocks are running at full speed.
                               CLK_PCKENR1 = 0xff;                 //  Enable all peripheral clocks.
                                   CLK_PCKENR2 = 0x00;                 //  Ditto.
                                      CLK_CCOR = 0;                       //  Turn off CCO.
                                      CLK_HSITRIMR = 0;                   //  Turn off any HSIU trimming.
                                         CLK_SWIMCCR = 0;                    //  Set SWIM to run at clock / 2.
                                          CLK_SWR = 0xe1;                     //  Use HSI as the clock source.
                                          CLK_SWCR = 0;                       //  Reset the clock switch control register.
                                     CLK_SWCR = (1<<1);                  //  Enable switching.
                                 while (CLK_SWCR & (1<<0));        //  Pause while the clock switch is busy.
                                    }

 

@far @interrupt void UART1_RECV_INTERRUPT (void){

 

 

 

 

 

}

Outcomes