Пример #1
0
/**
 * @brief   Low level HAL driver initialization.
 *
 * @notapi
 */
void hal_lld_init(void) {
    uint32_t n;

    /* The system is switched to the RUN0 mode, the default for normal
       operations.*/
    if (halSPCSetRunMode(SPC5_RUNMODE_RUN0) == OSAL_FAILED) {
        SPC5_CLOCK_FAILURE_HOOK();
    }

    /* PIT_0 clock initialization.*/
    halSPCSetPeripheralClockMode(30, SPC5_ME_PCTL_RUN(2) | SPC5_ME_PCTL_LP(2));

    /* TB counter enabled for debug and measurements.*/
    asm volatile ("li      %%r3, 0x4000       \t\n"   /* TBEN bit.            */
                  "mtspr   1008, %%r3"                /* HID0 register.       */
                  : : : "r3");

    /* PIT channel 0 initialization for Kernel ticks, the PIT is configured
       to run in DRUN,RUN0...RUN3 and HALT0 modes, the clock is gated in other
       modes.*/
    INTC_PSR(226)      = SPC5_PIT0_IRQ_PRIORITY;
    n = SPC5_AC12_DC4_CLK / OSAL_ST_FREQUENCY - 1;
    PIT_0.MCR.R         = 1;          /* Clock enabled, stop while debugging. */
    PIT_0.CH[0].LDVAL.R = n;
    PIT_0.CH[0].CVAL.R  = n;
    PIT_0.CH[0].TFLG.R  = 1;          /* Interrupt flag cleared.              */
    PIT_0.CH[0].TCTRL.R = 3;          /* Timer active, interrupt enabled.     */

    /* EDMA initialization.*/
//  edmaInit();
}
Пример #2
0
/**
 * @brief   Low level HAL driver initialization.
 *
 * @notapi
 */
void hal_lld_init(void) {
  uint32_t n;

  /* HSM PIT channel 0 initialization for Kernel ticks.*/
  n = 100000000 / OSAL_ST_FREQUENCY - 1;
  PIT_HSM.MCR.R            = 1;
  PIT_HSM.TIMER[0].LDVAL.R = n;
  PIT_HSM.TIMER[0].CVAL.R  = n;
  PIT_HSM.TIMER[0].TFLG.R  = 1;         /* Interrupt flag cleared.          */
  PIT_HSM.TIMER[0].TCTRL.R = 3;         /* Timer active, interrupt enabled. */

  /* HSM PIT interrupt vector enabled.*/
  INTC_PSR(8) = SPC5_PIT0_IRQ_PRIORITY;
}
Пример #3
0
/**
 * @brief   Low level HAL driver initialization.
 *
 * @notapi
 */
void hal_lld_init(void) {
  uint32_t n;

  /* The system is switched to the RUN0 mode, the default for normal
     operations.*/
  if (halSPCSetRunMode(SPC5_RUNMODE_RUN0) == OSAL_FAILED) {
    SPC5_CLOCK_FAILURE_HOOK();
  }

#if SPC5_HSM_HANDSHAKE == 1
  /* Notifies the HSM full clock initialization.*/
  HT2HSMF = 2;
#endif

#if SPC5_HSM_HANDSHAKE == 2
  /* Notifies the HSM full clock initialization by clearing WF_CC_DONE bit
   * Note that clearing a bit in HSM2HTF mailbox is done by writing 1 in the bit
   *
   * We also clear the CLK_CHG_RDY bit, no longer used
   */
  HSM2HTF = WF_CC_DONE | CLK_CHG_RDY;
#endif

  /* PIT_0 clock initialization.*/
  halSPCSetPeripheralClockMode(30, SPC5_ME_PCTL_RUN(2) | SPC5_ME_PCTL_LP(2));

  /* TB counter enabled for debug and measurements.*/
  asm volatile ("li      %%r3, 0x4000       \t\n"   /* TBEN bit.            */
                "mtspr   1008, %%r3"                /* HID0 register.       */
                : : : "r3");

  /* PIT channel 0 initialization for Kernel ticks, the PIT is configured
     to run in DRUN,RUN0...RUN3 and HALT0 modes, the clock is gated in other
     modes.*/
  INTC_PSR(226)      = SPC5_PIT0_IRQ_PRIORITY;
  n = SPC5_AC12_DC4_CLK / OSAL_ST_FREQUENCY - 1;
  PIT_0.MCR.R            = 1;       /* Clock enabled, stop while debugging. */
  PIT_0.TIMER[0].LDVAL.R = n;
  PIT_0.TIMER[0].CVAL.R  = n;
  PIT_0.TIMER[0].TFLG.R  = 1;       /* Interrupt flag cleared.              */
  PIT_0.TIMER[0].TCTRL.R = 3;       /* Timer active, interrupt enabled.     */

  /* EDMA initialization.*/
//  edmaInit();
}
Пример #4
0
/**
 * @brief   Low level ICU driver initialization.
 *
 * @notapi
 */
void icu_lld_init(void) {

  /* Submodules initially all not in use.*/
  icu_active_submodules0 = 0;
  icu_active_submodules1 = 0;
  icu_active_submodules2 = 0;
  icu_active_submodules3 = 0;

  /* Reset width and period registers.*/
  width = 0;
  period = 0;

#if SPC5_ICU_USE_SMOD0
  /* Driver initialization.*/
  icuObjectInit(&ICUD1);
  ICUD1.etimerp = &SPC5_ETIMER_0;
  ICUD1.smod_number = 0U;
  ICUD1.clock = SPC5_ETIMER0_CLK;
#endif

#if SPC5_ICU_USE_SMOD1
  /* Driver initialization.*/
  icuObjectInit(&ICUD2);
  ICUD2.etimerp = &SPC5_ETIMER_0;
  ICUD2.smod_number = 1U;
  ICUD2.clock = SPC5_ETIMER0_CLK;
#endif

#if SPC5_ICU_USE_SMOD2
  /* Driver initialization.*/
  icuObjectInit(&ICUD3);
  ICUD3.etimerp = &SPC5_ETIMER_0;
  ICUD3.smod_number = 2U;
  ICUD3.clock = SPC5_ETIMER0_CLK;
#endif

#if SPC5_ICU_USE_SMOD3
  /* Driver initialization.*/
  icuObjectInit(&ICUD4);
  ICUD4.etimerp = &SPC5_ETIMER_0;
  ICUD4.smod_number = 3U;
  ICUD4.clock = SPC5_ETIMER0_CLK;
#endif

#if SPC5_ICU_USE_SMOD4
  /* Driver initialization.*/
  icuObjectInit(&ICUD5);
  ICUD5.etimerp = &SPC5_ETIMER_0;
  ICUD5.smod_number = 4U;
  ICUD5.clock = SPC5_ETIMER0_CLK;
#endif

#if SPC5_ICU_USE_SMOD5
  /* Driver initialization.*/
  icuObjectInit(&ICUD6);
  ICUD6.etimerp = &SPC5_ETIMER_0;
  ICUD6.smod_number = 5U;
  ICUD6.clock = SPC5_ETIMER0_CLK;
#endif

#if SPC5_ICU_USE_SMOD6
  /* Driver initialization.*/
  icuObjectInit(&ICUD7);
  ICUD7.etimerp = &SPC5_ETIMER_1;
  ICUD7.smod_number = 0U;
  ICUD7.clock = SPC5_ETIMER1_CLK;
#endif

#if SPC5_ICU_USE_SMOD7
  /* Driver initialization.*/
  icuObjectInit(&ICUD8);
  ICUD8.etimerp = &SPC5_ETIMER_1;
  ICUD8.smod_number = 1U;
  ICUD8.clock = SPC5_ETIMER1_CLK;
#endif

#if SPC5_ICU_USE_SMOD8
  /* Driver initialization.*/
  icuObjectInit(&ICUD9);
  ICUD9.etimerp = &SPC5_ETIMER_1;
  ICUD9.smod_number = 2U;
  ICUD9.clock = SPC5_ETIMER1_CLK;
#endif

#if SPC5_ICU_USE_SMOD9
  /* Driver initialization.*/
  icuObjectInit(&ICUD10);
  ICUD10.etimerp = &SPC5_ETIMER_1;
  ICUD10.smod_number = 3U;
  ICUD10.clock = SPC5_ETIMER1_CLK;
#endif

#if SPC5_ICU_USE_SMOD10
  /* Driver initialization.*/
  icuObjectInit(&ICUD11);
  ICUD11.etimerp = &SPC5_ETIMER_1;
  ICUD11.smod_number = 4U;
  ICUD11.clock = SPC5_ETIMER1_CLK;
#endif

#if SPC5_ICU_USE_SMOD11
  /* Driver initialization.*/
  icuObjectInit(&ICUD12);
  ICUD12.etimerp = &SPC5_ETIMER_1;
  ICUD12.smod_number = 5U;
  ICUD12.clock = SPC5_ETIMER1_CLK;
#endif

#if SPC5_ICU_USE_SMOD12
  /* Driver initialization.*/
  icuObjectInit(&ICUD13);
  ICUD13.etimerp = &SPC5_ETIMER_2;
  ICUD13.smod_number = 0U;
  ICUD13.clock = SPC5_ETIMER2_CLK;
#endif

#if SPC5_ICU_USE_SMOD13
  /* Driver initialization.*/
  icuObjectInit(&ICUD14);
  ICUD14.etimerp = &SPC5_ETIMER_2;
  ICUD14.smod_number = 1U;
  ICUD14.clock = SPC5_ETIMER2_CLK;
#endif

#if SPC5_ICU_USE_SMOD14
  /* Driver initialization.*/
  icuObjectInit(&ICUD15);
  ICUD15.etimerp = &SPC5_ETIMER_2;
  ICUD15.smod_number = 2U;
  ICUD15.clock = SPC5_ETIMER2_CLK;
#endif

#if SPC5_ICU_USE_SMOD15
  /* Driver initialization.*/
  icuObjectInit(&ICUD16);
  ICUD16.etimerp = &SPC5_ETIMER_2;
  ICUD16.smod_number = 3U;
  ICUD16.clock = SPC5_ETIMER2_CLK;
#endif

#if SPC5_ICU_USE_SMOD16
  /* Driver initialization.*/
  icuObjectInit(&ICUD17);
  ICUD17.etimerp = &SPC5_ETIMER_2;
  ICUD17.smod_number = 4U;
  ICUD17.clock = SPC5_ETIMER2_CLK;
#endif

#if SPC5_ICU_USE_SMOD17
  /* Driver initialization.*/
  icuObjectInit(&ICUD18);
  ICUD18.etimerp = &SPC5_ETIMER_2;
  ICUD18.smod_number = 5U;
  ICUD18.clock = SPC5_ETIMER2_CLK;
#endif

#if SPC5_ICU_USE_SMOD18
  /* Driver initialization.*/
  icuObjectInit(&ICUD19);
  ICUD13.etimerp = &SPC5_ETIMER_3;
  ICUD13.smod_number = 0U;
  ICUD13.clock = SPC5_ETIMER3_CLK;
#endif

#if SPC5_ICU_USE_SMOD19
  /* Driver initialization.*/
  icuObjectInit(&ICUD20);
  ICUD14.etimerp = &SPC5_ETIMER_3;
  ICUD14.smod_number = 1U;
  ICUD14.clock = SPC5_ETIMER3_CLK;
#endif

#if SPC5_ICU_USE_SMOD20
  /* Driver initialization.*/
  icuObjectInit(&ICUD21);
  ICUD15.etimerp = &SPC5_ETIMER_3;
  ICUD15.smod_number = 2U;
  ICUD15.clock = SPC5_ETIMER3_CLK;
#endif

#if SPC5_ICU_USE_SMOD21
  /* Driver initialization.*/
  icuObjectInit(&ICUD22);
  ICUD16.etimerp = &SPC5_ETIMER_3;
  ICUD16.smod_number = 3U;
  ICUD16.clock = SPC5_ETIMER3_CLK;
#endif

#if SPC5_ICU_USE_SMOD22
  /* Driver initialization.*/
  icuObjectInit(&ICUD23);
  ICUD17.etimerp = &SPC5_ETIMER_3;
  ICUD17.smod_number = 4U;
  ICUD17.clock = SPC5_ETIMER3_CLK;
#endif

#if SPC5_ICU_USE_SMOD23
  /* Driver initialization.*/
  icuObjectInit(&ICUD24);
  ICUD18.etimerp = &SPC5_ETIMER_3;
  ICUD18.smod_number = 5U;
  ICUD18.clock = SPC5_ETIMER3_CLK;
#endif

#if SPC5_ICU_USE_ETIMER0

  INTC_PSR(SPC5_ETIMER0_TC0IR_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_TC1IR_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_TC2IR_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_TC3IR_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_TC4IR_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_TC5IR_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_WTIF_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;
  INTC_PSR(SPC5_ETIMER0_RCF_NUMBER) = SPC5_ICU_ETIMER0_PRIORITY;

#endif

#if SPC5_ICU_USE_ETIMER1

  INTC_PSR(SPC5_ETIMER1_TC0IR_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;
  INTC_PSR(SPC5_ETIMER1_TC1IR_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;
  INTC_PSR(SPC5_ETIMER1_TC2IR_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;
  INTC_PSR(SPC5_ETIMER1_TC3IR_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;
  INTC_PSR(SPC5_ETIMER1_TC4IR_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;
  INTC_PSR(SPC5_ETIMER1_TC5IR_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;
  INTC_PSR(SPC5_ETIMER1_RCF_NUMBER) = SPC5_ICU_ETIMER1_PRIORITY;

#endif

#if SPC5_ICU_USE_ETIMER2

  INTC_PSR(SPC5_ETIMER2_TC0IR_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;
  INTC_PSR(SPC5_ETIMER2_TC1IR_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;
  INTC_PSR(SPC5_ETIMER2_TC2IR_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;
  INTC_PSR(SPC5_ETIMER2_TC3IR_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;
  INTC_PSR(SPC5_ETIMER2_TC4IR_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;
  INTC_PSR(SPC5_ETIMER2_TC5IR_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;
  INTC_PSR(SPC5_ETIMER2_RCF_NUMBER) = SPC5_ICU_ETIMER2_PRIORITY;

#endif

#if SPC5_ICU_USE_ETIMER3

  INTC_PSR(SPC5_ETIMER3_TC0IR_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;
  INTC_PSR(SPC5_ETIMER3_TC1IR_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;
  INTC_PSR(SPC5_ETIMER3_TC2IR_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;
  INTC_PSR(SPC5_ETIMER3_TC3IR_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;
  INTC_PSR(SPC5_ETIMER3_TC4IR_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;
  INTC_PSR(SPC5_ETIMER3_TC5IR_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;
  INTC_PSR(SPC5_ETIMER3_RCF_NUMBER) = SPC5_ICU_ETIMER3_PRIORITY;

#endif
}
Пример #5
0
/**
 * @brief   Low level serial driver initialization.
 *
 * @notapi
 */
void sd_lld_init(void) {

#if SPC5_SERIAL_USE_LINFLEX0
  sdObjectInit(&SD1, NULL, notify1);
  SD1.linflexp = &SPC5_LINFLEX0;
  INTC_PSR(SPC5_LINFLEX0_RXI_NUMBER) = SPC5_SERIAL_LINFLEX0_PRIORITY;
  INTC_PSR(SPC5_LINFLEX0_TXI_NUMBER) = SPC5_SERIAL_LINFLEX0_PRIORITY;
  INTC_PSR(SPC5_LINFLEX0_ERR_NUMBER) = SPC5_SERIAL_LINFLEX0_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX1
  sdObjectInit(&SD2, NULL, notify2);
  SD2.linflexp = &SPC5_LINFLEX1;
  INTC_PSR(SPC5_LINFLEX1_RXI_NUMBER) = SPC5_SERIAL_LINFLEX1_PRIORITY;
  INTC_PSR(SPC5_LINFLEX1_TXI_NUMBER) = SPC5_SERIAL_LINFLEX1_PRIORITY;
  INTC_PSR(SPC5_LINFLEX1_ERR_NUMBER) = SPC5_SERIAL_LINFLEX1_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX2
  sdObjectInit(&SD3, NULL, notify3);
  SD3.linflexp = &SPC5_LINFLEX2;
  INTC_PSR(SPC5_LINFLEX2_RXI_NUMBER) = SPC5_SERIAL_LINFLEX2_PRIORITY;
  INTC_PSR(SPC5_LINFLEX2_TXI_NUMBER) = SPC5_SERIAL_LINFLEX2_PRIORITY;
  INTC_PSR(SPC5_LINFLEX2_ERR_NUMBER) = SPC5_SERIAL_LINFLEX2_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX3
  sdObjectInit(&SD4, NULL, notify4);
  SD4.linflexp = &SPC5_LINFLEX3;
  INTC_PSR(SPC5_LINFLEX3_RXI_NUMBER) = SPC5_SERIAL_LINFLEX3_PRIORITY;
  INTC_PSR(SPC5_LINFLEX3_TXI_NUMBER) = SPC5_SERIAL_LINFLEX3_PRIORITY;
  INTC_PSR(SPC5_LINFLEX3_ERR_NUMBER) = SPC5_SERIAL_LINFLEX3_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX4
  sdObjectInit(&SD5, NULL, notify5);
  SD5.linflexp = &SPC5_LINFLEX4;
  INTC_PSR(SPC5_LINFLEX4_RXI_NUMBER) = SPC5_SERIAL_LINFLEX4_PRIORITY;
  INTC_PSR(SPC5_LINFLEX4_TXI_NUMBER) = SPC5_SERIAL_LINFLEX4_PRIORITY;
  INTC_PSR(SPC5_LINFLEX4_ERR_NUMBER) = SPC5_SERIAL_LINFLEX4_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX5
  sdObjectInit(&SD6, NULL, notify6);
  SD6.linflexp = &SPC5_LINFLEX5;
  INTC_PSR(SPC5_LINFLEX5_RXI_NUMBER) = SPC5_SERIAL_LINFLEX5_PRIORITY;
  INTC_PSR(SPC5_LINFLEX5_TXI_NUMBER) = SPC5_SERIAL_LINFLEX5_PRIORITY;
  INTC_PSR(SPC5_LINFLEX5_ERR_NUMBER) = SPC5_SERIAL_LINFLEX5_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX6
  sdObjectInit(&SD7, NULL, notify7);
  SD7.linflexp = &SPC5_LINFLEX6;
  INTC_PSR(SPC5_LINFLEX6_RXI_NUMBER) = SPC5_SERIAL_LINFLEX6_PRIORITY;
  INTC_PSR(SPC5_LINFLEX6_TXI_NUMBER) = SPC5_SERIAL_LINFLEX6_PRIORITY;
  INTC_PSR(SPC5_LINFLEX6_ERR_NUMBER) = SPC5_SERIAL_LINFLEX6_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX7
  sdObjectInit(&SD8, NULL, notify8);
  SD8.linflexp = &SPC5_LINFLEX7;
  INTC_PSR(SPC5_LINFLEX7_RXI_NUMBER) = SPC5_SERIAL_LINFLEX7_PRIORITY;
  INTC_PSR(SPC5_LINFLEX7_TXI_NUMBER) = SPC5_SERIAL_LINFLEX7_PRIORITY;
  INTC_PSR(SPC5_LINFLEX7_ERR_NUMBER) = SPC5_SERIAL_LINFLEX7_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX8
  sdObjectInit(&SD9, NULL, notify9);
  SD9.linflexp = &SPC5_LINFLEX8;
  INTC_PSR(SPC5_LINFLEX8_RXI_NUMBER) = SPC5_SERIAL_LINFLEX8_PRIORITY;
  INTC_PSR(SPC5_LINFLEX8_TXI_NUMBER) = SPC5_SERIAL_LINFLEX8_PRIORITY;
  INTC_PSR(SPC5_LINFLEX8_ERR_NUMBER) = SPC5_SERIAL_LINFLEX8_PRIORITY;
#endif

#if SPC5_SERIAL_USE_LINFLEX9
  sdObjectInit(&SD10, NULL, notify10);
  SD10.linflexp = &SPC5_LINFLEX9;
  INTC_PSR(SPC5_LINFLEX9_RXI_NUMBER) = SPC5_SERIAL_LINFLEX9_PRIORITY;
  INTC_PSR(SPC5_LINFLEX9_TXI_NUMBER) = SPC5_SERIAL_LINFLEX9_PRIORITY;
  INTC_PSR(SPC5_LINFLEX9_ERR_NUMBER) = SPC5_SERIAL_LINFLEX9_PRIORITY;
#endif
}