Exemplo n.º 1
0
/***********************************************************************
 *
 * Function: sd_start_data_write
 *
 * Purpose: Start data write transfer operations to a card
 *
 * Processing:
 *     If the number of blocks to transfer is 0, return an error status
 *     to the caller. Install the standard data transmit interrupt
 *     handler. Set the data block size and data timeout clocks in the
 *     controller. Clear any latched data interrupts. Fill the transmit
 *     FIFO and decrement the amount to send by the filled amount.
 *     Enable data transfer interrupts as needed by the transmit
 *     interrupt handler. Decrement the number of blocks to transfer in
 *     the interrupt handler.
 *
 * Parameters:
 *     cmdreg : Command control register value
 *
 * Outputs: None
 *
 * Returns: _NO_ERROR if the configuration was ok, otherwise _ERROR
 *
 * Notes: None
 *
 **********************************************************************/
static STATUS sd_start_data_write(UNS_32 cmdreg)
{
  volatile UNS_32 tmp;
  UNS_32 datalen;
  STATUS status = _ERROR;

  /* Determine data length from block count */
  datalen = sdcarddat.dctrl.blocksize *
            sdcarddat.dctrl.xferdat.blocks;
  if ((datalen > 0) && (datalen <= 65024))
  {
    /* Number of words to send */
    sdcarddat.dctrl.tosend = datalen >> 2;

    /* Set standard transmit handler */
    int_install_irq_handler(IRQ_SD1, (PFV) sd1_tx_interrupt);

    /* Decrement block count for start of transfer */
    sdcarddat.dctrl.xferdat.blocks--;

    /* Setup blocksize, data length, data timeout, and direction */
    sdcarddat.regptr->sd_dtimer = sdcarddat.dctrl.data_to;
    sdcarddat.regptr->sd_dlen = datalen;
    sdcarddat.regptr->sd_dctrl &= ~SD_DIR_FROMCARD;

    /* Start command state machine */
    sdcarddat.regptr->sd_cmd = (cmdreg | SD_CPST_EN);

    int_enable(IRQ_SD1);

    status = _NO_ERROR;
  }
Exemplo n.º 2
0
/***********************************************************************
 * Function: I2Cinit 
 * Purpose:I2C初始化函数
 * Processing:
 *     设置波特率
 * 	   设置中断
 **********************************************************************/
void I2Cinit(unsigned int i2c_clk)
{
	I2CCLK_CTRL=0x03;
	I2C1->i2c_ctrl= 1<<8;
	while ((I2C1->i2c_ctrl &(1<<8))!=0);
	switch(i2c_clk)
	{
		case I2C_CLK_100K:
			I2C1->i2c_clk_hi= 520;
			I2C1->i2c_clk_lo=520;
			break;
		case I2C_CLK_400K:
			I2C1->i2c_clk_hi=96;
			I2C1->i2c_clk_lo=166;
			break;
		default:
			break;
	}

	int_install_irq_handler(IRQ_I2C_1,I2C_int_handler);
	
}
Exemplo n.º 3
0
/***********************************************************************
 *
 * Function: c_entry
 *
 * Purpose: Application entry point from the startup code
 *
 * Processing:
 *     See function.
 *
 * Parameters: None
 *
 * Outputs: None
 *
 * Returns: Always returns 1, or <0 on an error
 *
 * Notes: None
 *
 **********************************************************************/
int c_entry(void)
{
  SWIM_WINDOW_T win1;
  COLOR_T *fblog;
  INT_32 lcddev;

  /* Disable interrupts in ARM core */
  disable_irq_fiq();

  /* Setup miscellaneous board functions */
  phy3250_board_init();

  /* Set virtual address of MMU table */
  cp15_set_vmmu_addr((void *)
                     (IRAM_BASE + (256 * 1024) - (16 * 1024)));

  /* Initialize interrupt system */
  int_initialize(0xFFFFFFFF);

  /* Install standard IRQ dispatcher at ARM IRQ vector */
  int_install_arm_vec_handler(IRQ_VEC, (PFV) lpc32xx_irq_handler);

  /* Install RTC interrupt handler as a IRQ interrupts */
  int_install_irq_handler(IRQ_RTC, (PFV) rtc_user_interrupt);

  /* Open RTC */
  rtcdev = rtc_open(RTC, 0);
  if (rtcdev == 0)
  {
    /* Error */
    return -1;
  }

  /* Set a 1s match rate */
  secs = lsecs = 0;
  mstp.match_num      = 0;
  mstp.use_match_int  = TRUE;
  mstp.enable_onsw    = FALSE;
  mstp.match_tick_val = secs + 1;
  rtc_ioctl(rtcdev, RTC_ENABLE, 0);
  rtc_ioctl(rtcdev, RTC_SET_COUNT, 0);
  rtc_ioctl(rtcdev, RTC_CLEAR_INTS, RTC_MATCH0_INT_STS);
  rtc_ioctl(rtcdev, RTC_SETUP_MATCH, (INT_32) &mstp);

  /* Setup LCD muxing for STN Color 16BPP */
  clkpwr_setup_lcd(CLKPWR_LCDMUX_TFT16, 1);

  /* Enable clock to LCD block (HCLK_EN)*/
  clkpwr_clk_en_dis(CLKPWR_LCD_CLK, 1);

  /* Setup LCD paramaters in the LCD controller */
  lcddev = lcd_open(CLCDC, (INT_32) & LCD_DISPLAY);

  /* Upper Panel Frame Base Address register */
  lcd_ioctl(lcddev, LCD_SET_UP_FB, PHY_LCD_FRAME_BUF);

  /* Enable LCD controller and power signals */
  lcd_ioctl(lcddev, LCD_PWENABLE, 1);

  /* Enable LCD backlight */
  phy3250_lcd_backlight_enable(TRUE);

  /* Enable LCD power */
  phy3250_lcd_power_enable(TRUE);

  /* Set frame buffer address */
  fblog = (COLOR_T *) cp15_map_physical_to_virtual(PHY_LCD_FRAME_BUF);

  /* Create a SWIM window */
  swim_window_open(&win1, LCD_DISPLAY.pixels_per_line,
                   LCD_DISPLAY.lines_per_panel, fblog, 0, 0,
                   (LCD_DISPLAY.pixels_per_line - 1), (LCD_DISPLAY.lines_per_panel - 1),
                   1, WHITE, BLACK, BLACK);
  swim_put_ltext(&win1, "RTC example: This example will print the message "
                 "TICK whenever an RTC interrupt occurs (1 second intervals). It will "
                 "quit after 10 seconds\n");

  /* Enable RTC (starts counting) */
  rtc_ioctl(rtcdev, RTC_ENABLE, 1);

  /* Enable RTC interrupt in the interrupt controller */
  int_enable(IRQ_RTC);

  /* Enable IRQ interrupts in the ARM core */
  enable_irq();

  /* Loop for 10 seconds and let interrupts toggle the LEDs */
  while (secs < 10)
  {
    if (lsecs < secs)
    {
      swim_put_ltext(&win1, "TICK\n");
      lsecs = secs;
    }
  }
  /* Disable RTC interrupt in the interrupt controller */
  int_disable(IRQ_RTC);

  /* Disable interrupts in ARM core */
  disable_irq_fiq();

  /* Prior to closing the RTC, the ONSW key value is set. This will
     allow the RTC to keep it's value across resets as long as RTC
   power is maintained */
  rtc_ioctl(rtcdev, RTC_SETCLR_KEY, 1);

  /* Close RTC and LCD */
  rtc_close(rtcdev);
  lcd_close(lcddev);

  return 1;
}
Exemplo n.º 4
0
/***********************************************************************
 *
 * Function: c_entry
 *
 * Purpose: Application entry point from the startup code
 *
 * Processing:
 *     See function.
 *
 * Parameters: None
 *
 * Outputs: None
 *
 * Returns: Always returns 1, or <0 on an error
 *
 * Notes: None
 *
 **********************************************************************/
int c_entry(void)
{
  MST_MATCH_SETUP_T mstp;

  /* Disable interrupts in ARM core */
  disable_irq_fiq();

  /* Set virtual address of MMU table */
  cp15_set_vmmu_addr((void *)
                     (IRAM_BASE + (256 * 1024) - (16 * 1024)));

  /* Initialize interrupt system */
  int_initialize(0xFFFFFFFF);

  /* Install standard IRQ dispatcher at ARM IRQ vector */
  int_install_arm_vec_handler(IRQ_VEC, (PFV) lpc32xx_irq_handler);

  /* Install mstimer interrupts handlers as a IRQ interrupts */
  int_install_irq_handler(IRQ_MSTIMER, (PFV) mstimer_user_interrupt);

  /* Open mstimer */
  mstimerdev = mstimer_open(MSTIMER, 0);
  if (mstimerdev == 0)
  {
    /* Error */
    return -1;
  }

  /* Set a 10mS match rate */
  mstp.timer_num      = 0;
  mstp.use_int        = TRUE;
  mstp.stop_on_match  = FALSE;
  mstp.reset_on_match = TRUE;
  mstp.tick_val       = 0;
  mstp.ms_val         = MSTICKRATE;
  mstimer_ioctl(mstimerdev, MST_CLEAR_INT, 0);
  mstimer_ioctl(mstimerdev, MST_TMR_SETUP_MATCH, (INT_32) &mstp);

  /* Reset terminal count */
  mstimer_ioctl(mstimerdev, MST_TMR_RESET, 0);

  /* Enable mstimer (starts counting) */
  msecs = 0;
  mstimer_ioctl(mstimerdev, MST_TMR_ENABLE, 1);

  /* Enable mstimer interrupts in the interrupt controller */
  int_enable(IRQ_MSTIMER);

  /* Enable IRQ interrupts in the ARM core */
  enable_irq();

  /* Loop for 10 seconds and let interrupts toggle the LEDs */
  while (msecs < MSTIMEOUT);

  /* Disable mstimer interrupts in the interrupt controller */
  int_disable(IRQ_MSTIMER);

  /* Disable interrupts in ARM core */
  disable_irq_fiq();

  /* Close mstimer */
  mstimer_close(mstimerdev);

  return 1;
}
Exemplo n.º 5
0
/**********************************************************************
 *
 * Function: c_entry
 *
 * Purpose: Application entry point from the startup code
 *
 * Processing:
 *     See function.
 *
 * Parameters: None
 *
 * Outputs: None
 *
 * Returns: Nothing
 *
 * Notes: None
 *
 *********************************************************************/
void c_entry(void)
{
    SWIM_WINDOW_T win1;
    COLOR_T clr, *fblog;
    int idx;
    UNS_16 xgs, ygs, curx, cury, curym, xidx;

    /* Disable interrupts in ARM core */
    disable_irq_fiq();

    /* Set virtual address of MMU table */
    cp15_set_vmmu_addr((void *)
		(IRAM_BASE + (256 * 1024) - (16 * 1024)));

	/* Initialize interrupt system */
    int_initialize(0xFFFFFFFF);

    /* Install standard IRQ dispatcher at ARM IRQ vector */
    int_install_arm_vec_handler(IRQ_VEC, (PFV) lpc32xx_irq_handler);

    /* Setup miscellaneous board functions */
    phy3250_board_init();

    /* enable clock to ADC block - 32KHz clock */
    clkpwr_clk_en_dis(CLKPWR_ADC_CLK,1);

    /* TSC IRQ goes active when the FIFO reaches the Interrupt level */
    int_install_irq_handler(IRQ_TS_IRQ, (PFV) tsc_user_interrupt);

    /* Enable interrupt */
    int_enable(IRQ_TS_IRQ);

    /* Open TSC, sets default timing values, fifo = 16, 
	 resolution = 10bits */
    tscdev = tsc_open(TSC, 0);

    /* TSC Auto mode enable, this also sets AUTO bit */
    tsc_ioctl(tscdev,TSC_AUTO_EN, 1);
	  
    /* Setup LCD muxing for STN Color 16BPP */
    clkpwr_setup_lcd(CLKPWR_LCDMUX_TFT16, 1);

    /* Enable clock to LCD block (HCLK_EN)*/
    clkpwr_clk_en_dis(CLKPWR_LCD_CLK, 1);
	
    /* Setup LCD paramaters in the LCD controller */
    lcddev = lcd_open(CLCDC, (INT_32) &LCD_DISPLAY);

    /* Upper Panel Frame Base Address register */
    lcd_ioctl(lcddev, LCD_SET_UP_FB, PHY_LCD_FRAME_BUF); 

    /* Enable LCD controller and power signals */
    lcd_ioctl(lcddev, LCD_PWENABLE, 1);

    /* Enable LCD backlight */
    phy3250_lcd_backlight_enable(TRUE);

    /* Enable LCD power */
    phy3250_lcd_power_enable(TRUE);
	
    /* write cursor image array data to cursor image RAM */
    lcd_ioctl(lcddev, LCD_CRSR_INIT_IMG, (INT_32) &cursorimage[0]);

    /* enable the default cursor 0 */
    lcd_ioctl(lcddev,LCD_CRSR_EN,1);

    /* set the cursor X/Y position */
    lcd_ioctl(lcddev, LCD_CRSR_XY, 0x0); 

    /* set the cursor pallette BGR value, col0*/
    lcd_ioctl(lcddev, LCD_CRSR_PAL0, 0x00ff0000); 

    /* set the cursor pallette BGR value, col1 */
    lcd_ioctl(lcddev, LCD_CRSR_PAL1, 0x000000ff); 

    /* Enable IRQ interrupts in the ARM core */
    enable_irq();

    /* Set frame buffer address */
    fblog = (COLOR_T *)cp15_map_physical_to_virtual(PHY_LCD_FRAME_BUF);

    /* Create a SWIM window */
    swim_window_open(&win1, LCD_DISPLAY.pixels_per_line,
        LCD_DISPLAY.lines_per_panel, fblog, 0, 0,
		(LCD_DISPLAY.pixels_per_line - 1), 
		(LCD_DISPLAY.lines_per_panel - 1),
        1, WHITE, BLACK, BLACK);

	/* Compute vertical size for bars */
	ygs = LCD_DISPLAY.lines_per_panel / 3;

	/* Draw Red bars */
	cury = 0;
	curx = 0;
	curym = ygs - 1;
	xgs = LCD_DISPLAY.pixels_per_line / RED_COLORS;
	clr = BLACK;
	for (xidx = 0; xidx < RED_COLORS; xidx++)
	{
		swim_set_pen_color(&win1, clr);
		for (idx = 0; idx <= xgs; idx++)
		{
			swim_put_line(&win1, curx, cury, curx, curym);
			curx++;
		}

		clr = clr + 0x0800;
	}

	/* Draw green bars */
	cury = cury + ygs;
	curx = 0;
	curym = cury + (ygs - 1);
	xgs = LCD_DISPLAY.pixels_per_line / GREEN_COLORS;
	clr = BLACK;
	for (xidx = 0; xidx < GREEN_COLORS; xidx++)
	{
		swim_set_pen_color(&win1, clr);
		for (idx = 0; idx <= xgs; idx++)
		{
			swim_put_line(&win1, curx, cury, curx, curym);
			curx++;
		}

		clr = clr + 0x0020;
	}

	/* Draw blue bars */
	cury = cury + ygs;
	curx = 0;
	curym = cury + (ygs - 1);
	xgs = LCD_DISPLAY.pixels_per_line / BLUE_COLORS;
	clr = BLACK;
	for (xidx = 0; xidx < BLUE_COLORS; xidx++)
	{
		swim_set_pen_color(&win1, clr);
		for (idx = 0; idx <= xgs; idx++)
		{
			swim_put_line(&win1, curx, cury, curx, curym);
			curx++;
		}

		clr = clr + 0x0001;
	}


    /* lets stay here forever */
    while(1);

}
Exemplo n.º 6
0
/***********************************************************************
 *
 * Function: sd0_cmd_interrupt
 *
 * Purpose: Default SD card command interrupt handler
 *
 * Processing:
 *     This function is called when an SD0 card interrupt is generated.
 *     This will save the command status and response if it is valid.
 *     The command state machine is cleared and any commands interrupts
 *     are cleared and masked. If the user defined command callback
 *     function exists, then it is called before exiting this function.
 *
 * Parameters: None
 *
 * Outputs: None
 *
 * Returns: Nothing
 *
 * Notes: The user callback function is called in interrupt context.
 *
 **********************************************************************/
static void sd0_cmd_interrupt(void)
{
  int idx;
  volatile UNS_32 tmp;
  UNS_32 cmd;

  /* Save status */
  sdcarddat.dctrl.resp.cmd_status = sdcarddat.regptr->sd_status;

  /* Save response */
  sdcarddat.dctrl.resp.cmd_resp [0] = sdcarddat.regptr->sd_respcmd;
  for (idx = 0; idx < 4; idx++)
  {
    sdcarddat.dctrl.resp.cmd_resp [idx + 1] =
      sdcarddat.regptr->sd_resp [idx];
  }

  /* Stop command state machine */
  sdcarddat.regptr->sd_cmd &= ~SD_CPST_EN;

  /* Clear pending command statuses */
  sdcarddat.regptr->sd_clear = (SD_CMD_CRC_FAIL | SD_CMD_TIMEOUT |
    SD_CMD_RESP_RECEIVED | SD_CMD_SENT);
  sdcarddat.regptr->sd_mask0 = 0;

  if (sdcarddat.dctrl.xferdat.dataop == SD_DATAOP_WRITE)
  {
    /* Start data state machine */
    sdcarddat.regptr->sd_dctrl |= SD_DATATRANSFER_EN;

    /* Clear FIFO conditions */
    sdcarddat.regptr->sd_clear = (SD_FIFO_TXDATA_HEMPTY |
      SD_DATABLK_END | SD_FIFO_TXDATA_UFLOW | SD_DATA_TIMEOUT |
                                  SD_DATA_CRC_FAIL);

    if (sdcarddat.dmact.dma_enabled == TRUE)
    {
      /* Set DMA receive handler */
      int_install_irq_handler(IRQ_SD1, (PFV) sd1_dmatx_interrupt);

      /* Setup FIFO control conditions to interrupt when data
         block has been received, start bit errors, data FIFO
         overflow, data timeout, or data CRC error */
      sdcarddat.regptr->sd_mask1 = (SD_DATA_END |
        SD_FIFO_TXDATA_UFLOW | SD_DATA_TIMEOUT |
                                    SD_DATA_CRC_FAIL);
      sdcarddat.regptr->sd_dctrl |= SD_DMA_EN;

      /* Setup DMA transfer */
      if (sdcarddat.dctrl.xferdat.buff != NULL)
      {
        /* Setup source */
        sdcarddat.dmact.pdmaregs->dma_chan [sdcarddat.
          dmact.dmach].src_addr = (UNS_32) sdcarddat.dctrl.xferdat.buff;
        sdcarddat.dmact.pdmaregs->dma_chan [sdcarddat.
                                            dmact.dmach].lli = 0;
        sdcarddat.dmact.pdmaregs->dma_chan [sdcarddat.
          dmact.dmach].dest_addr = (UNS_32) & SDCARD->sd_fifo;
        sdcarddat.dmact.pdmaregs->dma_chan [sdcarddat.
          dmact.dmach].control = (DMAC_CHAN_SRC_AUTOINC |
		  DMAC_CHAN_SRC_AHB1 | DMAC_CHAN_DEST_WIDTH_32 |
		  DMAC_CHAN_SRC_WIDTH_32 | DMAC_CHAN_DEST_BURST_8 |
		  DMAC_CHAN_SRC_BURST_8);
      }

      /* Set DMA initial control */
      sdcarddat.dmact.pdmaregs->sync |= DMA_PER_SDCARD;

      /* Setup DMA config and start DMA controller */
      sdcarddat.dmact.pdmaregs->dma_chan [sdcarddat.
        dmact.dmach].config_ch = (DMAC_CHAN_IE | DMAC_CHAN_FLOW_P_M2P |
		DMAC_DEST_PERIP(DMA_PERID_SDCARD) | DMAC_CHAN_ENABLE);
    }
    else
    {
      /* If not DMA, use FIFO mode */
      /* Setup FIFO control conditions to interrupt when FIFO is
         empty or half empty, data block has been trasmitted, data
         has ended, data underflow, or data CRC error */
      sdcarddat.regptr->sd_mask1 = (SD_FIFO_TXDATA_HEMPTY |
		  SD_DATABLK_END | SD_FIFO_TXDATA_UFLOW | SD_DATA_TIMEOUT |
                                    SD_DATA_CRC_FAIL);

      /* Enable DMA if needed */
      sdcarddat.regptr->sd_dctrl &= ~SD_DMA_EN;

      /* Fill transmit FIFO */
      while ((sdcarddat.regptr->sd_status &
              SD_FIFO_TXDATA_FULL) == 0)
      {
        sdcarddat.regptr->sd_fifo [0] =
          *sdcarddat.dctrl.xferdat.buff;
        sdcarddat.dctrl.xferdat.buff++;
        sdcarddat.dctrl.tosend -= 1;
      }
    }
  }

  /* If a pending command is being used to stop this transfer,
     then set it up now */
  if (sdcarddat.dctrl.xferdat.usependcmd == TRUE)
  {
    sdcarddat.dctrl.xferdat.usependcmd = FALSE;
    cmd = prep_cmd(&sdcarddat.dctrl.xferdat.pendcmd);
    sdcarddat.regptr->sd_cmd = (cmd | 0 |
                                SD_CMDPEND_WAIT);
  }
  else
  {
    /* Disable SDMMC interrupt for now */
    int_disable(IRQ_SD0);

    /* Call command callback function if it exists */
    if (sdcarddat.sd0_cb != NULL)
    {
      sdcarddat.sd0_cb();
    }
  }
}
Exemplo n.º 7
0
/***********************************************************************
 *
 * Function: c_entry
 *
 * Purpose: Application entry point from the startup code
 *
 * Processing:
 *     See function.
 *
 * Parameters: None
 *
 * Outputs: None
 *
 * Returns: Always returns 1
 *
 * Notes: None
 *
 **********************************************************************/
int c_entry(void)
{
  TMR_PSCALE_SETUP_T pscale;
  TMR_MATCH_SETUP_T msetup;

  /* Disable interrupts in ARM core */
  disable_irq_fiq();

  /* Set virtual address of MMU table */
  cp15_set_vmmu_addr((void *)
                     (IRAM_BASE + (256 * 1024) - (16 * 1024)));

  /* Initialize interrupt system */
  int_initialize(0xFFFFFFFF);

  /* Install standard IRQ dispatcher at ARM IRQ vector */
  int_install_arm_vec_handler(IRQ_VEC, (PFV) lpc32xx_irq_handler);

  /* Install timer interrupts handlers as a IRQ interrupts */
  int_install_irq_handler(IRQ_TIMER0, (PFV) timer0_user_interrupt);
  int_install_irq_handler(IRQ_TIMER1, (PFV) timer1_user_interrupt);

  /* Open timers - this will enable the clocks for all timers when
     match control, match output, and capture control functions
     disabled. Default clock will be internal. */
  timer0dev = timer_open(TIMER_CNTR0, 0);
  timer1dev = timer_open(TIMER_CNTR1, 0);

  /******************************************************************/
  /* Setup timer 0 for a 10Hz match rate                            */

  /* Use a prescale count time of 100uS                             */
  pscale.ps_tick_val = 0; /* Use ps_us_val value */
  pscale.ps_us_val = 100; /* 100uS */
  timer_ioctl(timer0dev, TMR_SETUP_PSCALE, (INT_32) &pscale);

  /* Use a match count value of 1000 (1000 * 100uS = 100mS (10Hz))  */
  msetup.timer_num = 0; /* Use match register set 0 (of 0..3) */
  msetup.use_match_int = TRUE; /* Generate match interrupt on match */
  msetup.stop_on_match = FALSE; /* Do not stop timer on match */
  msetup.reset_on_match = TRUE; /* Reset timer counter on match */
  msetup.match_tick_val = 999; /* Match is when timer count is 1000 */
  timer_ioctl(timer0dev, TMR_SETUP_MATCH, (INT_32) &msetup);

  /* Clear any latched timer 0 interrupts and enable match
   interrupt */
  timer_ioctl(timer0dev, TMR_CLEAR_INTS,
              (TIMER_CNTR_MTCH_BIT(0) | TIMER_CNTR_MTCH_BIT(1) |
               TIMER_CNTR_MTCH_BIT(2) | TIMER_CNTR_MTCH_BIT(3) |
               TIMER_CNTR_CAPT_BIT(0) | TIMER_CNTR_CAPT_BIT(1) |
               TIMER_CNTR_CAPT_BIT(2) | TIMER_CNTR_CAPT_BIT(3)));
  /******************************************************************/

  /******************************************************************/
  /* Setup timer 1 for a 4.9Hz match rate                           */

  /* Use a prescale count time of 100uS                             */
  pscale.ps_tick_val = 0; /* Use ps_us_val value */
  pscale.ps_us_val = 10; /* 100uS */
  timer_ioctl(timer1dev, TMR_SETUP_PSCALE, (INT_32) &pscale);

  /* Use a match value of 490 (490 * 100uS)                         */
  msetup.timer_num = 0; /* Use match register set 0 (of 0..3) */
  msetup.use_match_int = TRUE; /* Generate match interrupt on match */
  msetup.stop_on_match = FALSE; /* Do not stop timer on match */
  msetup.reset_on_match = TRUE; /* Reset timer counter on match */
  msetup.match_tick_val = 489;
  timer_ioctl(timer1dev, TMR_SETUP_MATCH, (INT_32) &msetup);

  /* Clear any latched timer 1 interrupts and enable match
   interrupt */
  timer_ioctl(timer1dev, TMR_CLEAR_INTS,
              (TIMER_CNTR_MTCH_BIT(0) | TIMER_CNTR_MTCH_BIT(1) |
               TIMER_CNTR_MTCH_BIT(2) | TIMER_CNTR_MTCH_BIT(3) |
               TIMER_CNTR_CAPT_BIT(0) | TIMER_CNTR_CAPT_BIT(1) |
               TIMER_CNTR_CAPT_BIT(2) | TIMER_CNTR_CAPT_BIT(3)));
  /******************************************************************/

  /* Enable timers (starts counting) */
  msecs = 0;
  timer_ioctl(timer0dev, TMR_ENABLE, 1);
  timer_ioctl(timer1dev, TMR_ENABLE, 1);

  /* Enable timer interrupts in the interrupt controller */
  int_enable(IRQ_TIMER0);
  int_enable(IRQ_TIMER1);

  /* Enable IRQ interrupts in the ARM core */
  enable_irq();

  /* Loop for 20 seconds and let interrupts toggle the LEDs */
  while (msecs < (10 * 1000));

  /* Disable timer interrupts in the interrupt controller */
  int_disable(IRQ_TIMER0);
  int_disable(IRQ_TIMER1);

  /* Disable interrupts in ARM core */
  disable_irq_fiq();

  /* Close timers */
  timer_close(timer0dev);
  timer_close(timer1dev);

  return 1;
}
Exemplo n.º 8
0
void ici_hdw_init(void)
{
//register long i;

UART_CBS_T cbs;
UART_CONTROL_T ucntl;

//- typedef enum
//- {
//-   UART_PAR_NONE,
//-   UART_PAR_EVEN,
//-   UART_PAR_ODD
//- } UART_PAR_T;
//- 
//- /* UART control */
//- typedef struct
//- {
//-   UNS_32 baud_rate;     /* Device baud rate */
//-   UART_PAR_T parity;    /* Parity selection */
//-   UNS_32 databits;      /* Number of data bits */
//-   UNS_32 stopbits;      /* Number of stop bits */
//- } UART_CONTROL_T;

timer0dev = Timer_open(TIMER_CNTR0, 0);
TIMER_CNTR_REGS_T *pTimer = TIMER_CNTR0;
/*
 //-* Reset timer *-/
  pTimer->tcr = TIMER_CNTR_TCR_RESET;
  pTimer->tcr = 0;
  
   //-* Count mode is PCLK edge *-/
  pTimer->ctcr = TIMER_CNTR_SET_MODE(TIMER_CNTR_CTCR_TIMER_MODE);

  //-* Set prescale counter value for a 1uS tick *-/
  pTimer->pr = (UNS_32) Timer_usec_to_val(
                 CLKPWR_TIMER0_CLK, 1);
				 
	//case TMR_VALUE_ST:
    //          status = pTimer->tc;
    //          break;			 
  //-* Enable the timer *-/
  pTimer->tcr = TIMER_CNTR_TCR_EN;

  //-* Stop timer *-/
  //pTimer->tcr = 0;
*/
//Init Module New

 //-* Enable timer system clock *-/
  //.clkpwr_clk_en_dis(timer_num_to_clk_enum[timernum], 1);

  //-* Reset timer *-/
  pTimer->tcr = TIMER_CNTR_TCR_RESET;
  pTimer->tcr = 0;pTimer->tc  = 0;

  //-* Clear and enable match function *-/
  pTimer->ir = TIMER_CNTR_MTCH_BIT(0);

  //-* Count mode is PCLK edge *-/
  pTimer->ctcr = TIMER_CNTR_SET_MODE(TIMER_CNTR_CTCR_TIMER_MODE);

  //-* Set prescale counter value for a 1uS tick *-/
  pTimer->pr = (UNS_32) Timer_usec_to_val(
                 CLKPWR_TIMER0_CLK, 1);

  //-* Set match for number of usecs *-/
  pTimer->mr[0] = 20000;//-usec;

  //-* Interrupt on match 0 *-/
  pTimer->mcr = TIMER_CNTR_MCR_MTCH(0)|TIMER_CNTR_MCR_RESET(0);	

   //-* Install timer interrupts handlers as a IRQ interrupts *-/
  int_install_irq_handler(IRQ_TIMER0, (PFV) timer0_user_interrupt);








//~  ucntl.baud_rate = 115200;
//~  ucntl.parity = UART_PAR_NONE;
//~  ucntl.databits = 8;
//~  ucntl.stopbits = 1;
//~  uartdev = Uart_open((void *) UART3, (INT_32) & ucntl);
//~  if (uartdev != 0)
//~  {
//~    /* Setup RX and TX callbacks */
//~    cbs.rxcb = recv_cb;
//~    cbs.txcb = send_cb;
//~    cbs.rxerrcb = NULL;
//~    Uart_ioctl(uartdev, UART_INSTALL_CBS, (INT_32) &cbs);
//~    //.int_enable(IRQ_UART_IIR3);
//~  }
//~
//~  /* Initialize TX and RX ring buffers */
//~  //txfill = txget = rxfill = rxget = txsize = rxsize = 0;
//~  Rst_LpduHSU2_TpCnState();
//~  /* Enable interrupts */
//~  int_enable(IRQ_UART_IIR3);
//~  hs7_uart_hdw_init();
//~  hs1_uart_hdw_init();
//~  hs2_uart_hdw_init();
//~  
//~  enable_irq();
//~  //int_enable(IRQ_UART_IIR7);
//~  int_enable(IRQ_UART_IIR1);
//~  int_enable(IRQ_UART_IIR2);
   ssp1_hdr_init();
Rst_LpduM2m_TpCnState();
Rst_LpduSpi_TpCnState();
   GPIO->p0_mux_clr = 0xff;
  GPIO->p0_dir_clr = 0xff;   
  GPIO->p0_dir_set = 0xf0;   
  GPIO->p0_outp_clr =0xf0;
  M16_J18_K18_A15_PioInit();

  //p3_outp_state
 
AppReqTransmitTotVerInfoBrBs = 1;
  
  Int_install_ext_irq_handler(IRQ_GPIO_01,P02Int,FALLING_EDGE,0);//Interrupt in this place never can be workd look p606 datasheet - Only pin sic[8] activated
  Int_install_ext_irq_handler(IRQ_P0_P1_IRQ,P02Int,FALLING_EDGE,0);
  
  CLKPWR ->clkpwr_p01_er = CLKPWR_INTSRC_GPIO_01_BIT;// *((long*)0x40004018) |= 2;
  
	  Int_enable(IRQ_GPIO_01);
	  Int_enable(IRQ_P0_P1_IRQ);
  MIC->er |= (1<<(IRQ_SUB2IRQ));
  
 //~^  pTimer->tcr = TIMER_CNTR_TCR_EN;//timer_ioctl(timer0dev, TMR_ENABLE, 1);
 //~^ int_enable(IRQ_TIMER0);
  
  
}
Exemplo n.º 9
0
/**********************************************
ИНИЦИАЛИЗАЦИЯ СИСТЕМЫ ПРЕРЫВАНИЙ
**********************************************/
void  InitializeInterruptSystem()
{
  /* Initialize interrupt system */
  int_initialize(0xFFFFFFFF);

  /* Install standard IRQ dispatcher at ARM IRQ vector */
  int_install_arm_vec_handler(IRQ_VEC, (PFV) lpc32xx_irq_handler);
  /* Install standard FIQ dispatcher at ARM IRQ vector */
  int_install_arm_vec_handler(FIQ_VEC, (PFV) lpc32xx_fiq_handler);

//---------------------HSTIMER------------------------------------
  /* Install HSTIMER interrupt handler as a IRQ interrupts */
  int_install_irq_handler(IRQ_HSTIMER,
                          (PFV) hstimer_user_interrupt);


  // Save address of register block
  hst_regptr  = HSTIMER;
  gpio_regptr = GPIO;

  // LEDs off
  //gpio_regptr->p3_outp_clr = LED1 | LED2;
  //gpio_regptr->p1_dir_set = LED3;

  // Enable timer system clock
  clkpwr_clk_en_dis(CLKPWR_HSTIMER_CLK, 1);

  // Disable high speed timer and match timers
  hst_regptr->hstim_ctrl = HSTIM_CTRL_RESET_COUNT;
  hst_regptr->hstim_mctrl = 0;
  hst_regptr->hstim_ctrl = 0;

  // Clear pending interrupts
  hst_regptr->hstim_int = (HSTIM_MATCH0_INT |
                           HSTIM_MATCH1_INT | HSTIM_MATCH2_INT |
                           HSTIM_GPI_06_INT | HSTIM_RTC_TICK_INT);

  hst_regptr->hstim_mctrl = HSTIM_CNTR_MCR_MTCH(0) | HSTIM_CNTR_MCR_RESET(0);
  hst_regptr->hstim_pmatch = 13-1;
  hst_regptr->hstim_match[0] = 1000;//1ms 000;

  hst_regptr->hstim_ctrl = HSTIM_CTRL_COUNT_ENAB;//start hstimer

  // Enable interrupt in the interrupt controller
  int_enable(IRQ_HSTIMER);

//---------------------SSP1------------------------------------
  ssp1_regptr = SSP1; // Pointer to SSP1 registers
  // Enable ssp1 system clock
  clkpwr_clk_en_dis(CLKPWR_SSP1_CLK, 1);
  //конфигурация IO
  gpio_regptr->p2_mux_clr = P2_GPIO04_SSEL1;
  gpio_regptr->p2_dir_set = P2_DIR_GPIO(4);
  gpio_regptr->p3_outp_set = P3_STATE_GPIO(4);

  /* The MISO, MOSI, and SCK signals are controlled by the SSP1 */
  gpio_regptr->p_mux_set = (P_SPI2DATAIO_MOSI1 |
                            P_SPI2DATAIN_MISO1 | P_SPI2CLK_SCK1);

  ssp1_regptr->cpsr = SSP_CPSR_CPDVSR(16);//8);//4);//4);//prescale
  //ssp_clk / ((cr0_div + 1) * prescale);
  //prescale = 16; SCR = 4 - 1.25MGz
  ssp1_regptr->cr0 = SSP_CR0_DSS(8) |//data size 8 bit
                     SSP_CR0_FRF_SPI |//Motorola SPI mode
                     SSP_CR0_SCR(4);//serial clock rate

  // Default Master mode
  // Disable SSP1
  ssp1_regptr->cr1 &= ~SSP_CR1_SSP_ENABLE;

  // interr handler SSP1 IRQ
  //int_install_irq_handler(IRQ_SSP1, (PFV) ssp1_user_interrupt);

  // Enable interrupt in the interrupt controller
  //int_enable(IRQ_SSP1);
  // Clear interrupt in the interrupt controller
  //int_clear(IRQ_SSP1);

  // Enable SSP1
  ssp1_regptr->cr1 |= SSP_CR1_SSP_ENABLE;

}//InitializeInterruptSystem()