|
本文文章主要介绍使用Atmel SAM4S Xplained Pro评估套件创建工程的基本过程和技术。
所需的硬件/软件 SAM4S Xplained Pro入门套件 ● Atmel Studio
开发板与定制电路板 购买开发套件与设计和组装自己的PCB之间的差距还是挺大的。对于前者,您只需下个订单,几天后您就能拿到经过专业设计、全面测试的专业组装单元,可以满足您的最新应用需求。对于后者,您需要花费数小时的精心设计和PCB布局,然后进行劳动密集的PCB装配,当然总是有可能成品板部分甚至大多数不起作用。不过,我喜欢设计自己的PCB,原因之一是我可以使用更多种类的功能。因此,如果开发板提供了通常的优势,同时提供了一个可以方便评估的限制较少的功能,那么我对开发板特别满意。如果您有同样的感觉,我认为您会喜欢Atmel的Xplained Pro开发套件。
入门套件 在这个项目中,我们将使用SAM4S Xplained Pro开发板。MCU电路板(又名“评估套件”)本身并不那么令人印象深刻;令人印象深刻的部分是众多Xplained Pro扩展(也称为“附加”)模块,您可以将其插入处理器板上的一个扩展连接器。您可以在此处获取Xplained Pro评估套件和扩展模块的列表。如果您购买SAM4S Xplained Pro入门套件,您将获得ATSAM4SD32C微控制器的开发板以及三个扩展模块:一个带有OLED显示屏以及一些LED和按钮;一个(包括)光传感器、温度传感器、低通滤波器和装有2 GB microSD卡的microSD卡连接器(该模块称为“I / O板”);还有一个具有相当宽敞的通孔原型区域,并附有标记的信号插头。
该项目仅需要OLED扩展模块,但如果您想探测信号,原型模块上的标记标题很方便。
ASF软件框架 对于像我这样,通过使用汇编语言编程8051来开始他们的职业生涯,Atmel软件框架(ASF)是一个非常广泛的软件库,使得微控制器项目开发看起来几乎非常容易。然而,所有这些预先打包的、超级抽象的固件都有自己的缺陷和困难,因此谨慎对待。此外,您可能已经注意到工程从未真正变得容易,因为系统要求与我们工具的复杂性和效率成比例。。
因此,无论如何,使用Atmel器件开发项目的关键步骤是熟悉ASF。到本文结束时,您应该对ASF是什么以及如何使用它有一个很好的理解;现在我只提一些重点: ● ASF功能不仅包括微控制器本身,还包括开发板和外部第三方设备,例如OLED板上的OLED显示屏和I / O板上的温度传感器(以及其他未列入的其他设备)此入门套件 - 以太网收发器、LCD显示器、640×480 CMOS图像传感器、热释电红外传感器......) ● ASF集成到Atmel Studio(可以免费下载)。因此,将ASF功能集成到您的项目中不需要额外下载或单独的程序-ASF配置、代码开发、编译和调试都在Atmel Studio中进行。 ● 引用Atmel的话说:“ASF的目的是提供由Atmel专家开发的一系列经过验证的驱动程序和代码模块,以减少客户的设计时间。”“ASF是设计用于评估、原型设计、设计和生产阶段。“这里的重点是Atmel认为ASF非常可靠 - 您可以在原型设计阶段依赖它,甚至可以自信地包含在生产代码中。
详细步骤
不用多说,让我们仔细研究创建一个新的SAM4S Xplained Pro应用程序的过程。这里的目标是一个简单的“视频游戏”,利用OLED扩展板上的两个组件,即OLED显示屏和按钮。我们将介绍本文的初始步骤,然后在第2部分中开发其余功能。
1. 打开Atmel Studio。
2. 将OLED扩展板连接到SAM4S板上的EXT3接头,然后将USB电缆从SAM4S板上的“DEBUG USB”接口连接到PC的一个USB端口。当Atmel Studio识别评估套件时,您将看到以下界面。
3. 转到File → New → Project。 4. 选择“GCC C ASF Board Project”。
5. 键入项目的名称,然后单击“确定”。
6. 选择“Select By Board”并向下滚动到“SAM4S Xplained Pro - ATSAM4SD32C。”如滚动条中的深灰色矩形所示,它有点过了一半。单击确定。
7. 当Atmel Studio完成项目创建后,查看最右侧,您将看到“解决方案资源管理器”窗格中列出的新项目。 8. 下图显示了“src”目录中包含的文件夹和文件。您会注意到大多数文件的右下角都有深灰色方块。这表示该文件尚未修改。修改文件后,方块变为红色。
9. 看一下“main.c”文件。它已经有了一些信息性注释和一个极少的代码框架来帮助您入门。您可以删除main()函数中的所有内容。 10. 现在转到Project→ASF Wizard。在左上角,选择新项目(在本例中为OLEDTargetPractice)。 “Select Modules”窗格显示项目中已包含哪些ASF模块。这些是Atmel Studio默认包含的模块。由于我们将使用OLED显示器,我们需要为OLED接口添加ASF模块。
11. 向下滚动并选择“SSD1306 OLED控制器(组件)”模块。在窗口底部,单击“Add >>”,然后单击“应用”;将弹出一个对话框,为您提供“所选选项的操作摘要。”单击“确定”。 Atmel Studio会自动修改项目文件,以确保将此ASF模块正确地合并到项目中。我们不需要为此项目添加任何模块,因此您可以关闭“ASF向导”窗口。
最后,我们准备编写一些代码 以下代码摘录显示了该部分项目的main()函数。复制并粘贴到您的main()函数中。有关详细信息,请参阅代码中的注释部分。
- int main (void)
- {
- char DisplayString[] = "This is an OLED test.";
- char DisplayChar[2];
- uint8_t DisplayString_Length = 21;
- uint8_t n;
-
- //clock configuration and initialization
- sysclk_init();
-
- /*Disable the watchdog timer and configure/initialize
- port pins connected to various components incorporated
- into the SAM4S Xplained development platform, e.g., the
- NAND flash, the OLED interface, the LEDs, the SW0 pushbutton.*/
- board_init();
- //initialize SPI and the OLED controller
- ssd1306_init();
-
- /*The second character in this two-character array must be zero
- so that the ssd1306_write_text() function correctly interprets the
- array as a one-character string.*/
- DisplayChar[1] = 0;
-
- while (1)
- {
- /*Clear the OLED screen, then set the cursor to the
- top-left character position.*/
- ssd1306_clear();
- ssd1306_set_page_address(0);
- ssd1306_set_column_address(0);
-
- for (n = 0; n < DisplayString_Length; n++)
- {
- /*Copy the current character of DisplayString
- to the one-character array DisplayChar.*/
- DisplayChar[0] = DisplayString[n];
-
- //display the single character
- ssd1306_write_text(DisplayChar);
-
- //the ASF includes handy delay functions
- delay_ms(400);
- }
- }
- }
复制代码
硬件配置怎么样?
ASF框架生成配置文件,您可以根据应用程序要求方便地修改。
ASF函数查看这些文件中的信息,以确定如何精确配置硬件。例如,“conf_clock.h”文件包括与系统时钟源,系统时钟预分频器和PLL(锁相环)设置相关的预处理器定义列表。您可以通过注释/取消注释某些预处理器定义或修改定义来“配置”此时钟硬件。然后,您所要做的就是调用sysclk_init()函数,该函数将合并您的首选项,因为它会处理所有时钟配置细节。 让我们继续修改配置文件,之后我们将能够在OLED上显示文本。 ● 在“conf_board.h”中:添加“Enable the OLED screen”定义。 - #ifndef CONF_BOARD_H
- #define CONF_BOARD_H
- // Enable the OLED screen
- #define CONF_BOARD_SPI
- #define CONF_BOARD_SPI_NPCS1
- #define CONF_BOARD_SPI_NPCS2
- #define CONF_BOARD_OLED_UG_2832HSWEG04
- #endif /* CONF_BOARD_H */
复制代码
● 在“conf_clock.h”中:注释掉“PLL1(B)”定义和“USB Clock Source”定义。该项目不使用PLL1或USB。
- #ifndef CONF_CLOCK_H_INCLUDED
- #define CONF_CLOCK_H_INCLUDED
- // ===== System Clock (MCK) Source Options
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_SLCK_RC
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_SLCK_XTAL
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_SLCK_BYPASS
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_4M_RC
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_8M_RC
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_12M_RC
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_XTAL
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_BYPASS
- #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLLACK
- //#define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLLBCK
- // ===== System Clock (MCK) Prescaler Options (Fmck = Fsys / (SYSCLK_PRES))
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_1
- #define CONFIG_SYSCLK_PRES SYSCLK_PRES_2
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_4
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_8
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_16
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_32
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_64
- //#define CONFIG_SYSCLK_PRES SYSCLK_PRES_3
- // ===== PLL0 (A) Options (Fpll = (Fclk * PLL_mul) / PLL_div)
- // Use mul and div effective values here.
- #define CONFIG_PLL0_SOURCE PLL_SRC_MAINCK_XTAL
- #define CONFIG_PLL0_MUL 20
- #define CONFIG_PLL0_DIV 1
- // ===== PLL1 (B) Options (Fpll = (Fclk * PLL_mul) / PLL_div)
- // Use mul and div effective values here.
- //#define CONFIG_PLL1_SOURCE PLL_SRC_MAINCK_XTAL
- //#define CONFIG_PLL1_MUL 16
- //#define CONFIG_PLL1_DIV 2
- // ===== USB Clock Source Options (Fusb = FpllX / USB_div)
- // Use div effective value here.
- //#define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL0
- //#define CONFIG_USBCLK_SOURCE USBCLK_SRC_PLL1
- //#define CONFIG_USBCLK_DIV 2
复制代码
● 在“conf_spi_master.h”中:无需更改。 ● 在“conf_ssd1306.h”中:删除“Support and FAQ . . .”注释下的所有内容,使用以下内容代替,这取自Atmel的示例代码: - /*
- * Support and FAQ: visit Atmel Support
- */
- #ifndef CONF_SSD1306_H_INCLUDED
- #define CONF_SSD1306_H_INCLUDED
- // Interface configuration for SAM4S Xplained Pro
- #define SSD1306_SPI_INTERFACE
- #define SSD1306_SPI SPI
- #define SSD1306_DC_PIN UG_2832HSWEG04_DATA_CMD_GPIO
- #define SSD1306_RES_PIN UG_2832HSWEG04_RESET_GPIO
- #define SSD1306_CS_PIN UG_2832HSWEG04_SS
- /* Minimum clock period is 50ns@3.3V -> max frequency is 20MHz */
- #define SSD1306_CLOCK_SPEED UG_2832HSWEG04_BAUDRATE
- #define SSD1306_DISPLAY_CONTRAST_MAX 40
- #define SSD1306_DISPLAY_CONTRAST_MIN 30
- #endif /* CONF_SSD1306_H_INCLUDED */
复制代码
现在我们准备运行令人振奋的文本显示程序。单击“Start Without Debugging”按钮(即填充的绿色三角形旁边的未填充绿色三角形),如果一切顺利,则功能将与我们预计的一样。
总结
现在您熟悉使用Atmel Studio创建自己的项目所需的基本步骤,而不是或多或少地盲目地修改其中一个示例项目。在下一篇文章中,我们将完成一款原始的视频游戏,在此过程中,我们将学习如何与OLED扩展板上的显示模块和按钮进行连接。
|