Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define BUF_SIZE 8
- extern volatile char buffer[BUF_SIZE];
- extern volatile int index = 0;
- #pragma CODE_SEG __NEAR_SEG NON_BANKED
- interrupt void RTI_ISR(void) {
- absoluteTime++;
- /* clear RTIF bit */
- CRGFLG = 0x80;
- }
- #pragma CODE_SEG __NEAR_SEG NON_BANKED
- interrupt void TOF_ISR(void) {
- PORTA = PORTA+1;
- TFLG2 = 0x80;
- }
- #pragma CODE_SEG __NEAR_SEG NON_BANKED
- interrupt void SCI0R_ISR(void) {
- if(index > 8)
- index = 0;
- buffer[index++] = SCI1DRL; /*Read from register*/
- }
- #pragma CODE_SEG __NEAR_SEG NON_BANKED
- interrupt void OC2_ISR(void) {
- TC2 = TC2 + 15000/2 /*Half period*/;
- TFLG1 = 0x04; /*Clear interrupt flag*/
- }
- interrupt void IC1_ISR(void) {
- time = TC2;
- TFLG1 = 0x02; /*Clear interrupt flag*/
- }
- #pragma CODE_SEG DEFAULT
- static void RTIInit(void) {
- /* setup of the RTI interrupt frequency */
- /* adjusted to get 1 millisecond (1.024 ms) with 16 MHz oscillator */
- RTICTL = 0x1F; /* set RTI prescaler */
- CRGINT = 0x80; /* enable RTI interrupts */
- }
- static void TimerInit(void){
- /* 10ms*(24000000/16) = 15000 */
- DDRA = 0xFF; /* PORTA output*/
- TSCR1 = 0x80; /* Turn on timer*/
- TSRC2 = 0x85; /*Enable timer overflow, set prescalar */
- TFLG2 = 0x80; /*Clear timer interrupt flag*/
- }
- static void PWMInit(void){
- PWMCTL = 0x00; /* 8-bit Mode */
- PWMPOL = 0xFF; /* High polarity mode */
- PWMCAE = 0x00; /* Left-Aligned */
- PWMPRCLK = PWMPRCLK & ~0x07; /* PCKA = 0 */
- PWMCLK = PWMCLK | 0x01; /* PCLK0 = 1 */
- PWMSCLA = 30;
- PWMPER0 = 200; /*Total period of duty cycle*/
- PWME = PWME | 0x01; /* Enable PWM Channel 0 */
- PWDTY0 = 120; /* 60% duty cycle on Channel 0(120/PWMPER0) */
- }
- static void SPI0_Init(void){
- // SPI communication initialization as a master
- SPI0BR = 0b00100101; // Baud rate = 24MHz/16 = 1.5MHz 0x53;
- SPI0CR2 = 0b00010000; // SPI0CR2_SPISWAI=1 : Stop SPI clocks when in wait mode
- SPI0CR1 = 0b01010010; // Enable SPI ; Master mode ; CPHA = 1 ;
- WOMS = 0;
- }
- static void SCI0_Init(void){
- SCI1BDL = 156; /* Set BAUD rate to 9,600 */
- SCI1BDH = 0;
- SCI1CR1 = 0x00;
- SCI1CR2 = 0x36; /*Recieve Interrupts, Transmit, Recieve enable */
- }
- static void OC2_Init(void){
- TSCR1 = 0x80; /*Enable Timers */
- TSCR2 = 0x04; /*Set prescale to 16(0.666us) */
- TIOS = 0x04; /* Set IOS2 as Output Compare*/
- TCTL2 = 0x10; /*Toggle on compare*/
- TFLG1 = 0x04; /*Clear OC2 flag*/
- TIE = 0x04; /*Enable OC2 interupts*/
- }
- static void IC1_Init(void){
- TSCR1 = 0x80; /* Turn on timer subsystem */
- TSCR2 = 0x05; /* Set prescaler for divide by 32 */
- /* 87.38 ms overflow time */
- TIOS = TIOS & ~0x02; /*only IC1 is low for input */
- TCTL4 = 0x04 /*EDG1A enabled, captures rising edge*/
- TFGL1 = 0x02 /*Clear flag 1*/
- }
- static void ADTD0_Init(void){
- ATD0CTL2 = 0x80; /* Power up A/D, no interrupts */
- ATD0CTL3 = 0x00; /* Doe eight conversions */
- ATD0CTL4 = 0x85; /* 8-bit mode */
- ATD0CTL5 = 0xA4; /* Cont conversion, right justified */
- adcvalue = ATD0DR0H; /* Grab the value from register*/
- }
- void SCI0_OutChar(char data) {
- while((SCI0SR1 & TDRE) == 0){};
- SCI0DRL = data;
- }
- char SCI0_InChar(void){
- /* Only used when Recieve Interrupt disabled*/
- while((SCI0SR1 & RDRF) == 0){};
- return(SCI0DRL);
- }
- char SCI0_ReadBuffer(void){
- char data = buffer[index--];
- if(index < 0)
- index = 0;
- return data;
- }
- static void SPI0_send(char x){
- // Send a byte to the slave blocking(CPU will wait)
- while( SPI0SR_SPTEF == 0); // Wait until SPIDR becomes empty.
- SPI0DR = 0xAA; // Clear the flag SPI0SR_STEF
- while( SPI0SR_SPIF == 0 ); // Wait until the end of an SPI transfer.
- data = SPI0DR;
- }
- char SPI0_receive(void) {
- // Receive a byte from the slave
- while(SPI0SR_SPTEF == 0); // Wait until the SPI0DR is empty
- SPI0DR = 0x00; // Read SPI0DR to clear the SPI0SR_SPTEF flag
- while(SPI0SR_SPIF == 0); // Wait until a SPI transfer is finished
- return SPI0DR; // Write the received data to data
- }
- void main(void)
- RTIInit();
- TimerInit();
- PWMInit();
- SPI0_Init();
- EnableInterrupts;
- SPI0_send('a');
- for(;;)
- {
- }
- /* Interrupt Vector Table
- * const IsrFunc _vectab[] @0x3e00 /*0xFF80 =
- {
- (IC1_ISR)0,
- (OC2_ISR)0,
- (RTI_ISR)0,
- (TOF_ISR)0,
- (SCI0R_ISR)0,
- */
Advertisement
Add Comment
Please, Sign In to add comment