[Atmel] 跑一下SAM4N例程(十二):DAC输出

[复制链接]
1136|0
 楼主| ddllxxrr 发表于 2015-3-18 13:35 | 显示全部楼层 |阅读模式
好久也没跑例程了。原因是板子坏了,怎么好得请看:SAM4N XPLAINED pro出现 No device detect性ed. Error 4109的解决办法

今天跑的是ADC例程:

在Atmel Studio6.2环境下插上SAM4N板子,就直接有打开新例程,那一项。然后打开ADC的那个例程,截图如下:


其中ADC软出管脚定义如下:

  1. #ifndef CONF_DACC_SINEWAVE_EXAMPLE_H_INCLUDED
  2. #define CONF_DACC_SINEWAVE_EXAMPLE_H_INCLUDED

  3. //! DAC channel used for test (PB13)
  4. #define DACC_CHANNEL        0
  5. //! DAC register base for test
  6. #define DACC_BASE           DACC
  7. //! DAC ID for test
  8. #define DACC_ID             ID_DACC

  9. #endif /* CONF_DACC_SINEWAVE_EXAMPLE_H_INCLUDED */



也就是说用的是DAC通道0即第PB13脚输出。


而该程可以允许用户输入频率的大小,及幅度的大小,当然在一定范围内。其值的改变是在时钟中断里实现的
  1. void SysTick_Handler(void)
  2. {
  3.         uint32_t status;
  4.         uint32_t dac_val;

  5.         status = dacc_get_interrupt_status(DACC_BASE);

  6.         /* If ready for new data */
  7.         if ((status & DACC_ISR_TXRDY) == DACC_ISR_TXRDY) {
  8.                 g_ul_index_sample++;
  9.                 if (g_ul_index_sample >= SAMPLES) {
  10.                         g_ul_index_sample = 0;
  11.                 }
  12.                 dac_val = g_uc_wave_sel ?
  13.                                 ((g_ul_index_sample > SAMPLES / 2) ? 0 : MAX_AMPLITUDE)
  14.                                 : wave_to_dacc(gc_us_sine_data[g_ul_index_sample],
  15.                                          g_l_amplitude,
  16.                                          MAX_DIGITAL * 2, MAX_AMPLITUDE);
  17.                 dacc_write_conversion_data(DACC_BASE, dac_val);
  18.         }
  19. }


而主程序负责同用户交互:

  1. while (1) {
  2.                 usart_serial_getchar((Usart *)CONSOLE_UART, &uc_key);

  3.                 switch (uc_key) {
  4.                 case '0':
  5.                         printf("Frequency:\t");
  6.                         ul_freq = get_input_value(MIN_FREQUENCY, MAX_FREQUENCY);
  7.                         printf("\r\n");

  8.                         if (ul_freq != VAL_INVALID) {
  9.                                 printf("Set frequency to : %luHz\n\r", (unsigned long)ul_freq);
  10.                                 SysTick_Config(sysclk_get_cpu_hz() / (ul_freq * SAMPLES));
  11.                                 g_ul_frequency = ul_freq;
  12.                         }
  13.                         break;

  14.                 case '1':
  15.                         printf("Amplitude:\t");
  16.                         ul_amp = get_input_value(MIN_AMPLITUDE, MAX_AMPLITUDE);
  17.                         printf("\r\n");
  18.                         if (ul_amp != VAL_INVALID) {
  19.                                 printf("Set amplitude to : %lu\n\r", (unsigned long)ul_amp);
  20.                                 g_l_amplitude = ul_amp;
  21.                         }
  22.                         break;

  23.                 case 'i':
  24.                 case 'I':
  25.                         printf("-I- Frequency : %lu Hz Amplitude : %ld\n\r",
  26.                                 (unsigned long)g_ul_frequency, (long)g_l_amplitude);
  27.                         break;

  28.                 case 'w':
  29.                 case 'W':
  30.                         printf("-I- Switch wave to : %s\n\r", g_uc_wave_sel ?
  31.                                 "SINE" : "Full Amplitude SQUARE");
  32.                         g_uc_wave_sel = (g_uc_wave_sel + 1) & 1;
  33.                         break;

  34.                 case 'm':
  35.                 case 'M':
  36.                         display_menu();
  37.                         break;
  38.                 }
  39.                 puts("Press \'m\' or \'M\' to display the main menu again!\r");
  40.         }




以下是运行的载图:有关输出示波器的照片明天再发,今天手机没有拿。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7001

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部