Tiva C LaunchPad入门(1)

因为项目需要,开始学习Tiva系列的LaunchPad。先研究的是TM4C123G这款板子,这款板子相对来说比较新,使用它来进行开发的人也不多,因此是很新的技术。所能找到的中文资料相当有限,而官网的论坛以及文档资料又确实是相当苦涩,对于没有接触过硬件的我来说简直是天书。于是遵循我一贯的学习路线,直接研究源代码,先玩着试一下吧。


下载好CCS6之后,再下载TM4C123G的开发包,然后打开Example中的HelloWorld程序进行学习。




上图是编译前,下图是编译后,编译后多出了binariesincludes,在Debug下多出了hello.objhello.outstartup_ccs.objhello.ppstartup_ccs.pp的文件。Utils后面的文件没有改变。


解读Hello.c

先说明几个端口。GPIOGeneral Purpose Input Output 通用输入/输出),UART: Universal Asynchronous Receiver/Transmitter (通用异步收发传输器)GPIO是普通的IO口,而UART是协议输出口。UART将资料由串行通信与并行通信间作传输转换,作为并行输入成为串行输出的芯片。CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFOFirst Input First Output,先入先出队列)传送到串行设备。

 

首先从入口main开始看,先进行一些默认的设置。


    //
    // Enable lazy stacking for interrupt handlers.  This allows floating-point
    // instructions to be used within interrupt handlers, but at the expense of
    // extra stack usage.
	// 设置lazyStack,这个不知道有什么用
    //
    ROM_FPULazyStackingEnable();

    //
    // Set the clocking to run directly from the crystal.
    // 设置系统时钟,以后细看
    //
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
                       SYSCTL_OSC_MAIN);

    //
    // Enable the GPIO port that is used for the on-board LED.
    // 设置GPIO端口,F口专门控制LED灯,我尝试换成其他的端口均不能控制。
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

    //
    // Enable the GPIO pins for the LED (PF2 & PF3).
    // 使能GPIO对LED的控制端口,这里不知道为什么还要再
    // 使能一遍。第一个参数对应上面使能的外围端口,第二
    // 个参数设置为PIN2。如果设置PIN3的话显示的是绿光。
    //
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);
    //
    // 配置UART,这里我只连接了USB口,UART是应该是板子通过一个UART转USB的模块向PC输出的。
//
ConfigureUART();

下面来看ConfigureUART这个函数。

void
ConfigureUART(void)
{
    //
    // 使能GPIO口,在这块芯片中应该是GPIOA负责UART通信转换的
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    //
    // Enable UART0
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

    //
    // 配置GPIO引脚作为UART模式,PA0为接收,PA1为发送。还是不明白为什么这里会用或运算。
    //
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    //
    // Use the internal 16MHz oscillator as the UART clock source.
    // 设置UART0的端口的时钟,设置为16MHz的晶振频率。
    //
    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);

    //
    // Initialize the UART for console I/O.
    // 不对啊,明明是这一步才设置为16Mhz的。
    //
    UARTStdioConfig(0, 115200, 16000000);
}

跳出函数,紧接着执行

	//
	// Hello!
	//这一步的意思应该是MCU向UART端口写Helloworld,然后通过UART转USB传送到PC,
	//然后PC端接收到后显示在屏幕上。可是不知道为什么我的显示是空白。
    //
    UARTprintf("Hello, world!\n");
    while(1)
    {
        //
        // Turn on the BLUE LED.
    	// 这里改成了PIN_3之后就变成了绿灯了,PIN_2是蓝灯。但是
    	// 这里的端口设置还是要和上面enable的一致,否则会错误。
        //
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);

        //
        // Delay for a bit.
        // 这里设置维持该状态的时间,在处理中断的时候应该很有用。
        //SysCtlDelay(SysCtlClockGet() / 10 / 3);
        SysCtlDelay(SysCtlClockGet() / 2);
        //
        // Turn off the BLUE LED.
        //
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);

        //
        // Delay for a bit.
        //
        SysCtlDelay(SysCtlClockGet() / 10 / 3);
    }



你可能感兴趣的:(crawler4j)