/*
 *  boot() - Runs through application firmware checking, and then boots
 *
 *  INPUT
 *      none
 *  OUTPUT
 *      true/false whether boot was successful
 *
 */
static bool boot(void)
{
    if(magic_ok())
    {
        layout_home();

        if(signatures_ok() == 0) /* Signature check failed */
        {
            delay_ms(500);

            if(!confirm_without_button_request("Unofficial Firmware",
                                               "Do you want to continue booting?"))
            {
                layout_simple_message("Boot Aborted");
                goto cancel_boot;
            }

            layout_home();
        }

        led_func(CLR_RED_LED);
        cm_disable_interrupts();
        set_vector_table_application();
        application_jump();
    }
    else
    {
        layout_simple_message("Please Reinstall Firmware");
        goto cancel_boot;
    }

cancel_boot:
    return(false);
}
示例#2
0
uint64_t time_get_ns() {
  uint64_t result;
  // keep calculating result until it is calculated without a rollover having
  // happened
  cm_disable_interrupts();
  do {
    result = (rollovers << 24) | (0xffffff - systick_get_value());
  } while(check_rollover());
  cm_enable_interrupts();
  return result*125/9;
}
/*
 * main - Bootstrap main entry function
 *
 * INPUT
 *     - argc: (not used)
 *     - argv: (not used)
 * OUTPUT
 *     0 when complete
 */
int main(int argc, char* argv[])
{
    (void)argc;
    (void)argv;

    /* Main loop for bootloader to transition to next step */
	cm_disable_interrupts();
    set_vector_table_bootloader();
    bootloader_jump();
    bootstrap_halt();

    return(0); /* Should never get here */
}
示例#4
0
unsigned int usart_putc(char c)
{
  cm_disable_interrupts();
  unsigned int next = (tx_head + 1) % sizeof(tx_buf);
  if (waiting_tx_bytes() == sizeof(tx_buf)) {
    cm_enable_interrupts();
    return 0;
  }

  tx_buf[tx_head] = c;
  tx_head = next;
  cm_enable_interrupts();
  usart_enable_tx_interrupt(USART1);
  return 1;
}
示例#5
0
int dbg_serial_write( unsigned char *d, unsigned short n )
{
    int res = 0;
    cm_disable_interrupts();
    res = dbg_fifo_write( &usart_tx_buf, d, n );
    if( res && !(USART_CR1(DBG_USART) & USART_CR1_TXEIE) )
    {
        if( dbg_fifo_read_byte( &usart_tx_buf, &usart_data ) )
        {
            while( !(USART_SR(DBG_USART) & USART_SR_TXE) );///пока буфер не пуст
            usart_send(DBG_USART, usart_data);
            usart_enable_tx_interrupt(DBG_USART);
        }
    }
    cm_enable_interrupts();
    return res;
}
示例#6
0
文件: main.c 项目: area3001/knixx
int main(void)
{
	cm_disable_interrupts();
	clk_tree_setup();
	mco_setup();
	clock_setup();
	usb_setup();
	cli_setup();
	pwm_init();
	led_setup();
	button_setup();
	ncn_setup();
	cm_enable_interrupts();

	while (1) {
		__WFI();
	}

	return 0;
}
示例#7
0
int dbg_serial_read( unsigned char *d, unsigned short n )
{
    int res;
    res = 0;
    while( n-- )
    {
        cm_disable_interrupts();
        if( dbg_fifo_read_byte( &usart_rx_buf, d ) )
        {
            cm_enable_interrupts();
            d++;
            res++;
        }
        else
        {
            cm_enable_interrupts();
            break;
        }
    }
    return res;
}
示例#8
0
void disable_interrupts() {
  cm_disable_interrupts();
}
示例#9
0
void sys_tick_handler(void) {
  cm_disable_interrupts();
  check_rollover();
  cm_enable_interrupts();
}
示例#10
0
文件: cpu.c 项目: alexkuehn/rockclock
void cpu_disable_int( void )
{
	cm_disable_interrupts();
}