cancel
Showing results for 
Search instead for 
Did you mean: 

INTTERUPT ST9 FOR SCI

gumina
Associate II
Posted on February 22, 2006 at 06:57

INTTERUPT ST9 FOR SCI

1 REPLY 1
gumina
Associate II
Posted on February 22, 2006 at 06:57

hello to all,

it is my first post that shipment.

I have a problem with the ST9 F120, I am trying to create a software that to every data received on the serial me kinds a interrupt.

I have connected the ST9 to a hyperterminal I am through SCI1(9,1,9,0), SCI0(5,2,5,1); digit on hyperterminal the SCI0 I would want that it generated a interrupt and that me correspondent to SCI1 wrote the characters on an other hyperterminal but unfortunately this does not happen could even help me with a small code of example? I enclose you mine more soon main and rows SCI.C aspect to yours news thanks

MAIN.C

void main(void)

{

di();

INIT_PLL();

INIT_SCI();

INIT_SCI1();

INIT_SCI_IT();

ei();

spp(P0C_PG);

P0C2R = 0x00;

P0C1R = 0xFF;

P0C0R = 0x00;

P0DR&=0;

while(1)

{

INIT_SCI_IT();

ei();

spp(P0C_PG);

P0DR &= 0x0;

P0DR ^= 0x2;

spp(SCI0_PG);

ToRec=S_RXBR;

if (ToRec != temp)

{

spp(SCI1_PG);

S_TXBR=ToRec;

temp=ToRec;

}

}

spp(P0C_PG);

P0DR ^= 0x80;

}

SCI.C

#include ''sci.h''

#include

#include ''io_port.h''

#include ''define.h''

#include ''device.h''

#include ''ioinit.h''

#include ''string.h''

unsigned char ToReceive;

unsigned int c=0;

void INIT_SCI(void)

{

spp(SCI0_PG);

S_BRGHR = (unsigned char)((SCI_BRGENERATOR & 0xFF00)/256);

S_CHCR = SCI_CHAR;

S_CCR = SCI_MORECLOCK; /*CCR register: TXCLK = OCLK = XRX = CD = 0 */

S_ISR = 0;

S_IDPR = 0;

S_BRGLR = (unsigned char)(SCI_BRGENERATOR & 0x00FF);

IN_TTL(PORT_SCI0_IN, PIN_SCI0_IN);

OUT_AFPP(PORT_SCI0_OUT, PIN_SCI0_OUT);

}

void INIT_SCI1(void)

{

spp(SCI1_PG);

S_BRGHR = (unsigned char)((SCI_BRGENERATOR & 0xFF00)/256);

S_CHCR = SCI_CHAR;

S_CCR = SCI_MORECLOCK; /*CCR register: TXCLK = OCLK = XRX = CD = 0 */

S_ISR = 0;

S_IDPR = 0;

S_BRGLR = (unsigned char)(SCI_BRGENERATOR & 0x00FF);

IN_TTL(PORT_SCI1_IN, PIN_SCI1_IN);

OUT_AFPP(PORT_SCI1_OUT, PIN_SCI1_OUT);

}

void INIT_SCI_IT(void)

{

spp(SCI0_PG);

S_IVR = (IT_SCI_VECT & 0xF8);

S_IDPR &= SCI_MASK;

S_IDPR |= PRIO_SCI;

S_IMR &= SCI_MASK;

S_IMR |= Sm_rxdi;

}

#pragma interrupt INTSCI_Receive

void INTSCI_Receive(void)

{

#ifdef NO_SAVE_RESTORE_PPR_IN_IT

SAVE_PAGE;

#endif

spp(SCI0_PG);

ToReceive=S_RXBR;

spp(SCI1_PG);

S_TXBR=ToReceive;

spp(SCI0_PG);

S_IMR &= ~Sm_rxa;

S_ISR &= ~Sm_rxap; /*clear pending bits*/

S_IMR &= ~Sm_rxdp;

#ifdef NO_SAVE_RESTORE_PPR_IN_IT

RESTORE_PAGE;

#endif

di();

}