今天这个程序很简单
首先,新建一个ASF工程,然后选择XMEGA-B1开发板,则该板上的LED及SPI还有USART都已经定义好了。
如下程序:
#ifndef _XMEGA_B1_XPLAINED_H_
#define _XMEGA_B1_XPLAINED_H_
#include "compiler.h"
#include "conf_board.h"
#include "gpio.h"
/*! \name Miscellaneous data
*/
//! @{
//! Validate board support for the common sensor service.
#define COMMON_SENSOR_PLATFORM
/*! \name Voltages
*/
//! @{
#define VCC_TARGET 3.30
#define VCC_ANA 3.30
#define VCC_USB 5.00
//! @}
/*! \name ADC Connection of the Temperature Sensor
*/
//! @{
#define TEMPERATURE_SENSOR_ADC_MODULE ADCB
#define TEMPERATURE_SENSOR_ADC_INPUT ADCCH_POS_PIN0
#define TEMPERATURE_SENSOR_SIGNAL_PIN IOPORT_CREATE_PIN(PORTB,0)
//! @}
/*! \name ADC Connection of the Light Sensor
*/
//! @{
#define LIGHT_SENSOR_ADC_MODULE ADCB
#define LIGHT_SENSOR_ADC_INPUT ADCCH_POS_PIN2
#define LIGHT_SENSOR_SIGNAL_PIN IOPORT_CREATE_PIN(PORTB,2)
//! @}
/*! \name ADC Connection of the Potentiometer
*/
//! @{
#define POTENTIOMETER_ADC_MODULE ADCB
#define POTENTIOMETER_ADC_INPUT ADCCH_POS_PIN1
#define POTENTIOMETER_SIGNAL_PIN IOPORT_CREATE_PIN(PORTB,1)
//! @}
/*! \name ADC Connection of the External Voltage Input
*/
//! @{
#define EXT_VIN_ADC_MODULE ADCB
#define EXT_VIN_ADC_INPUT ADCCH_POS_PIN3
#define EXT_VIN_SIGNAL_PIN IOPORT_CREATE_PIN(PORTB,3)
//! @}
/*! \name Common ADC module used for on-board sensor.
*/
//! @{
#define BOARD_SENSOR_ADC_MODULE ADCB
//! @}
/*! \name USER LEDs
*/
//! @{
#define USERLEDPORT PORTB
#define USERLEDMASK (0xF0)
#define USERLED0POS PIN4_bp
static inline void user_led_set(uint8_t b)
{
USERLEDPORT.OUT = b << USERLED0POS;
}
static inline void user_led_toggle(void)
{
USERLEDPORT.OUTTGL = USERLEDMASK;
}
//! @}
/*! \name Touch
*/
//! @{
#define TOUCHPORT PORTE
#define TOUCHMASK (0x0F)
#define TOUCH0POS PIN0_bp
static inline bool is_touch0(void)
{
if (TOUCHPORT.IN & (1<<(TOUCH0POS ))) return false;
else return true;
}
static inline bool is_touch1(void)
{
if (TOUCHPORT.IN & (1<<(TOUCH0POS+1))) return false;
else return true;
}
/* If USARTE0 is enabled, touch buttons CS2 and CS3 will not work, as they
* share pins with the USART. These functions are then not defined if the user
* tries to use them, generating an error rather than
* the buttons not working. */
#ifndef CONF_BOARD_ENABLE_USARTE0
static inline bool is_touch2(void)
{
if (TOUCHPORT.IN & (1<<(TOUCH0POS+2))) return false;
else return true;
}
static inline bool is_touch3(void)
{
if (TOUCHPORT.IN & (1<<(TOUCH0POS+3))) return false;
else return true;
}
#endif
static inline uint8_t touch_get(void)
{
return (((~TOUCHPORT.IN) & TOUCHMASK) << TOUCH0POS);
}
//! @}
/*! \name LCD BACKLIGHT
*/
//! @{
#define BACKLIGHTPORT PORTE
#define BACKLIGHT_GPIO IOPORT_CREATE_PIN(PORTE,5)
#define BACKLIGHT_TIMER TCE0
#ifndef BACKLIGHT_TIMER_FREQUENCY
#define BACKLIGHT_TIMER_FREQUENCY 2000000
#endif
#ifndef BACKLIGHT_TIMER_COUNT
#define BACKLIGHT_TIMER_COUNT 0x7FFF
#endif
static inline void backlight_on(void)
{
gpio_set_pin_high(BACKLIGHT_GPIO);
}
static inline void backlight_off(void)
{
gpio_set_pin_low(BACKLIGHT_GPIO);
}
static inline void backlight_toggle(void)
{
gpio_toggle_pin(BACKLIGHT_GPIO);
}
//! @}
/*! \name Number of LEDs.
*/
//! @{
#define LED_COUNT 4
//! @}
/*! \name GPIO Connections of LEDs
*/
//! @{
#define LED0_GPIO IOPORT_CREATE_PIN(PORTB,4)
#define LED1_GPIO IOPORT_CREATE_PIN(PORTB,5)
#define LED2_GPIO IOPORT_CREATE_PIN(PORTB,6)
#define LED3_GPIO IOPORT_CREATE_PIN(PORTB,7)
#define LED_POWER IOPORT_CREATE_PIN(PORTE,4)
#define LED0 LED0_GPIO
#define LED1 LED1_GPIO
#define LED2 LED2_GPIO
#define LED3 LED3_GPIO
//! @}
/*! \name GPIO Connections of Push Buttons
* Warning, PB4 to PB7 are available only if JTAG is disabled.
*/
//! @{
#define GPIO_PUSH_BUTTON_0 IOPORT_CREATE_PIN(PORTE,0)
#define GPIO_PUSH_BUTTON_1 IOPORT_CREATE_PIN(PORTE,1)
#define GPIO_PUSH_BUTTON_2 IOPORT_CREATE_PIN(PORTE,2)
#define GPIO_PUSH_BUTTON_3 IOPORT_CREATE_PIN(PORTE,3)
//! @}
/*! \name SPI Connections of the AT45DBX Data Flash Memory
*/
//! @{
#define AT45DBX_SPI &USARTC0
#define AT45DBX_CS IOPORT_CREATE_PIN(PORTD,2)
#define AT45DBX_MASTER_SCK IOPORT_CREATE_PIN(PORTC,5) // SCK as output
#define AT45DBX_MASTER_MOSI IOPORT_CREATE_PIN(PORTC,7) // MOSI as output
#define AT45DBX_MASTER_MISO IOPORT_CREATE_PIN(PORTC,6) // MISO as input
#define AT45DBX_SPI_CLK_MASK SYSCLK_PORT_C
//! @}
//! \name MXT143E Xplained top module
//@{
#define MXT143E_XPLAINED_TWI &TWIC
#define MXT143E_XPLAINED_USART_SPI &USARTC0
#define MXT143E_XPLAINED_CS IOPORT_CREATE_PIN(PORTC, 4)
#define MXT143E_XPLAINED_SCK IOPORT_CREATE_PIN(PORTC, 7)
#define MXT143E_XPLAINED_MOSI IOPORT_CREATE_PIN(PORTC, 5)
#define MXT143E_XPLAINED_MISO IOPORT_CREATE_PIN(PORTC, 6)
#define MXT143E_XPLAINED_CHG IOPORT_CREATE_PIN(PORTC, 2)
#define MXT143E_XPLAINED_DC IOPORT_CREATE_PIN(PORTC, 3)
#define MXT143E_XPLAINED_BACKLIGHT IOPORT_CREATE_PIN(PORTA, 4)
#define MXT143E_XPLAINED_LCD_RESET IOPORT_CREATE_PIN(PORTA, 6)
//@}
/*! \name Power ON LED management
*
*/
//! @{
static inline void led_power_on(void)
{
gpio_set_pin_high(LED_POWER);
}
static inline void led_power_off(void)
{
gpio_set_pin_low(LED_POWER);
}
/*! \name External oscillator
*/
//@{
#define BOARD_XOSC_HZ 8000000
#define BOARD_XOSC_TYPE XOSC_TYPE_XTAL
#define BOARD_XOSC_STARTUP_US 2000
//@}
#ifdef CONF_BOARD_LCD_BACKLIGHT_PWM
void backlight_set_pwm(uint16_t pwm);
uint16_t backlight_get_pwm(void);
void backlight_stop_pwm(void);
void backlight_start_pwm(void);
#endif
#endif // _XMEGA_B1_XPLAINED_H_
上边的:
#define LED0_GPIO IOPORT_CREATE_PIN(PORTB,4)
#define LED1_GPIO IOPORT_CREATE_PIN(PORTB,5)
#define LED2_GPIO IOPORT_CREATE_PIN(PORTB,6)
#define LED3_GPIO IOPORT_CREATE_PIN(PORTB,7)
#define LED_POWER IOPORT_CREATE_PIN(PORTE,4)
#define LED0 LED0_GPIO
#define LED1 LED1_GPIO
#define LED2 LED2_GPIO
#define LED3 LED3_GPIO
则可以看出,用LED0,也可以写LED0_GPIO
看了一下硬件:
这四个管脚都接在了端口B上。
以下是程序:里边的换哪个写法效果都一样地
#include <asf.h>
int main (void)
{
/* Insert system clock initialization code here (sysclk_init()). */
//sysclk_init();
board_init();
//ioport_set_pin_high(LED0);
//ioport_set_pin_high(LED1);
//ioport_set_pin_high(LED2);
//ioport_set_pin_high(LED3);
ioport_set_pin_high(LED0_GPIO);
ioport_set_pin_high(LED1_GPIO);
ioport_set_pin_high(LED2_GPIO);
ioport_set_pin_high(LED3_GPIO);
while(1);
/* Insert application code here, after the board has been initialized. */
}
以下运行效果:
|