Показано с 1 по 1 из 1

Тема: Mk c8051f410

  1. #1
    Junior user Аватар для Friendly
    Регистрация
    26.04.2012
    Сообщений
    577

    Mk c8051f410

    MK C8051F410 имеет повышенную тактовую частоту до 50 Мгц.
    В сравнении с C051F320 имеет много отличий, требует более сложной конфигурации.


    Программка, запускаемая в проекте Кейла для C8051F410 - поморгает светодиодом:



    //************************************************** *********
    #include <stdio.h>
    #include <string.h>
    #include <c8051f410.h>

    #define uchar unsigned char
    #define uint unsigned int

    sbit LED = P0^4;


    void delay_us(uint time);
    void SYSCLK_Init (char speed);


    //************************************************** ***
    void main(void) {
    int i;
    PCA0MD &= ~0x40; // STARTUP.A51

    SYSCLK_Init (12); // 12 Mhz

    VDM0CN = 0x80; // enable the VDD monitor
    for (i = 0; i < 80; i++); // wait for the monitor to stabilize
    RSTSRC = 0x06; // enable missing clock detector and
    // VDD monitor as reset sources


    P0MDOUT = 0x00; // 0xFF: P0.n Output is push-pull.
    P1MDOUT = 0x00; // 0xFF: P1.n Output is push-pull.
    P2MDOUT = 0x00; // 0xFF: P2.n Output is push-pull.

    P0MDIN = 0xFF; // 0xFF: P0.n pin configured digital.
    P1MDIN = 0xFF; // 0xFF: P1.n pin configured digital.
    P2MDIN = 0xFF; // 0xFF: P2.n pin configured digital.

    P0SKIP = 0x00;
    P1SKIP = 0x00;
    P2SKIP = 0x00;

    P0 = 0xFF;
    P1 = 0xFF;
    P2 = 0xFF;

    XBR0 = 0x02; // Enable SPI
    XBR1 = 0x40; // Enable crossbar and disable weak ups


    while(1){
    LED = ! LED;
    for(i=0; i<50; i++) delay_us(20000);

    } }


    //**************************************************
    void delay_us(uint time){
    while(time--!=0);
    }



    //************************************************** *******************
    // 1) char speed - desired speed in Mhz
    // valid values are 3, 6, 12, 24, and 50
    //************************************************** *******************
    void SYSCLK_Init (char speed)
    {
    int i;

    OSCICN = 0x87; // Init to default value
    CLKSEL = 0x00;
    CLKMUL = 0x00;
    FLSCL = 0x00;

    switch (speed)
    {
    case 3 : OSCICN = 0x84; break; // Div by 8
    case 6 : OSCICN = 0x85; break; // Div by 4
    case 12: OSCICN = 0x86; break; // Div by 2
    case 24: OSCICN = 0x87; break; // Div by 1

    case 50: OSCICN = 0x87; // 24.5 Mhz
    CLKMUL = 0x00; // Disable; INTOSC/2 is CLKMUL src
    // MULDIV = 1; so 24.5/2/1 * 4 = ~50Mhz

    CLKMUL |= 0x80; // Enable

    for (i = 0; i < 100; i++); // Delay

    CLKMUL |= 0xC0; // Initialize

    while ( (CLKMUL & 0x20) == 0){}; // Poll

    FLSCL = 0x10; // If >25Mhz, enable FLRT

    CLKSEL = 0x02; // Make multiplier the sysclk

    break;

    default: break; // Use default value from above
    }
    }
    //************************************************** ************
    Последний раз редактировалось Friendly; 09.07.2013 в 16:29.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •