|
【Atmel SAM R21创意大赛周计划】+ GPU运行
[复制链接]
好吧,折腾了一下,基本上还比较顺利,GPU已经被驱动起来了,关于GPU相关的可以参考之前的帖子。
【Atmel SAM R21创意大赛周计划】+添加GPU
恩,驱动采用的SAM R21 Xplained Pro板子上面的EXT1扩展口中的SPI接口,SPI引脚等资源基本上在samr21_xplanined_pro.h文件中已经详细的定义了。
实际中做了一些HAL的分层处理,方便后期移植。
- /* Defines -------------------------------------------------------------------*/
- #define EXT1_SPI_MODULE_BAUDRATE 5000000UL
- /* Macros --------------------------------------------------------------------*/
- #define GPIO_PIN_HIGH(GPIN) port_pin_set_output_level(GPIN, true)
- #define GPIO_PIN_LOWL(GPIN) port_pin_set_output_level(GPIN, false)
- #define EXT1_PIN5_HIGH() GPIO_PIN_HIGH(EXT1_PIN_5)
- #define EXT1_PIN5_LOWL() GPIO_PIN_LOWL(EXT1_PIN_5)
复制代码
初始化部分,采用库方式,比较简单
- /* Includes ------------------------------------------------------------------*/
- #include <asf.h>
- #include <FT800_HAL_Arch.h>
- /* Global Variables ----------------------------------------------------------*/
- struct spi_slave_inst EXT1_SPI_Slaver;
- struct spi_module EXT1_SPI_Master;
- /* Global Functions ----------------------------------------------------------*/
- /**
- * @brief EXT1_PIN5_INIT
- * @note EXT1 PIn5初始化
- * @param none
- * @retval none
- */
- void EXT1_PIN5_INIT(void)
- {
- struct port_config pin_conf;
-
- /* 配置PIN5作为输出 */
- port_get_config_defaults(&pin_conf);
- pin_conf.direction = PORT_PIN_DIR_OUTPUT;
- port_pin_set_config(EXT1_PIN_5, &pin_conf);
- port_pin_set_output_level(EXT1_PIN_5, false);
- }
-
- /**
- * @brief EXT1_SPIS_INIT
- * @note EXT1_SPI初始化
- * @param none
- * @retval none
- */
- void EXT1_SPIS_INIT(void)
- {
- struct spi_config Config_SPI_Master;
- struct spi_slave_inst_config Slaver_Dev_Config;
-
- /* 配置并初始化从外设软设备实例 */
- spi_slave_inst_get_config_defaults(&Slaver_Dev_Config);
- Slaver_Dev_Config.ss_pin = EXT1_PIN_SPI_SS_0;
- spi_attach_slave(&EXT1_SPI_Slaver, &Slaver_Dev_Config);
-
- /* 配置/初始化/使能SERCOM外设为SPI模式 */
- spi_get_config_defaults(&Config_SPI_Master);
- Config_SPI_Master.mux_setting = EXT1_SPI_SERCOM_MUX_SETTING;
- Config_SPI_Master.mode_specific.master.baudrate = EXT1_SPI_MODULE_BAUDRATE;
- Config_SPI_Master.pinmux_pad0 = EXT1_SPI_SERCOM_PINMUX_PAD0;
- Config_SPI_Master.pinmux_pad1 = PINMUX_UNUSED;
- Config_SPI_Master.pinmux_pad2 = EXT1_SPI_SERCOM_PINMUX_PAD2;
- Config_SPI_Master.pinmux_pad3 = EXT1_SPI_SERCOM_PINMUX_PAD3;
- spi_init(&EXT1_SPI_Master, EXT1_SPI_MODULE, &Config_SPI_Master);
-
- spi_enable(&EXT1_SPI_Master);
- }
- /**
- * @brief EXT1_SPI_NSS_HIGH
- * @note EXT1_SPI 片选高
- * @param none
- * @retval none
- */
- void EXT1_SPI_NSS_HIGH(void)
- {
- spi_select_slave(&EXT1_SPI_Master, &EXT1_SPI_Slaver, false);
- }
- /**
- * @brief EXT1_SPI_NSS_LOWL
- * @note EXT1_SPI片选低
- * @param none
- * @retval none
- */
- void EXT1_SPI_NSS_LOWL(void)
- {
- spi_select_slave(&EXT1_SPI_Master, &EXT1_SPI_Slaver, true);
- }
- /**
- * @brief EXT1_SPI_WRITE
- * @note EXT1_SPI写操作
- * @param none
- * @retval none
- */
- uint8_t EXT1_SPI_WRITE(uint8_t *buff, uint8_t len)
- {
- spi_write_buffer_wait(&EXT1_SPI_Master, buff, len);
- return len;
- }
- /**
- * @brief EXT1_SPI_READD
- * @note EXT1_SPI读操作
- * @param none
- * @retval none
- */
- uint8_t EXT1_SPI_READD(uint8_t *buff, uint8_t len)
- {
- spi_read_buffer_wait(&EXT1_SPI_Master, buff, len, 8);
- return len;
- }
复制代码
到此基本上就OK,哎,估计以后要失业,现在跑个demo太快了,社会有些浮躁啊,不过atmel的库还是很不错的,设计者很用心,认识到位。
然后基本上就是HAL层对应GPU层的一些宏了。
- /* ---------------------------------------------------------------------------*/
- /* ---------------------------------------------------------------------------*/
- #define FT800_SPI_INIT() EXT1_SPIS_INIT()
- #define FT800_FDI_INIT() EXT1_PIN5_INIT()
- #define FT800_SPI_READD(buf, len) EXT1_SPI_READD(buf, len)
- #define FT800_SPI_WRITE(buf, len) EXT1_SPI_WRITE(buf, len)
- #define SET_FT800_CS_PIN_LOWL() EXT1_SPI_NSS_LOWL()
- #define SET_FT800_CS_PIN_HIGH() EXT1_SPI_NSS_HIGH()
- #define SET_FT800_PD_PIN_LOWL() EXT1_PIN5_LOWL()
- #define SET_FT800_PD_PIN_HIGH() EXT1_PIN5_HIGH()
复制代码
恩,发一些运行的图片吧,视频后面补上,不太好拍,晚上光线不好,手机像素垃圾。。。
恩,主要做了两个东西一个魔方三维的,用于展示openGL的特性,另外一个是ECG,测心率的,数据是模拟的,仅仅用于演示。
恩,主要做了两个东西一个魔方三维的,用于展示openGL的特性,另外一个是ECG,测心率的,数据是模拟的,仅仅用于演示。
后面结合R21板子做实际的应用,还没开始搞呢。。
|
|