Звуковой генератор beeper STM8.. Раздел: STM8.

Eugene's MCU

Воскресенье, 13.07.2014, 18:01

Главная | | Мой профиль | Выход | RSS
Меню сайта
Категории каталога
Рекламный блок





Рекомендовать этот сайт:

Главная » Статьи » » STM8


Звуковой генератор beeper STM8.
§ > Выбор альтернативной функции вывода "beeper", источника тактирования и его делителя

     Модуль звукового генератора микроконтроллеров STM8 предназначен для генерации на выводе "beeper" прямоугольных импульсов фиксированной звуковой частоты. Часть регистров, участвующих в  работе модуля, расположены в области байтов конфигурации flash-памяти микроконтроллера и требуют специализированной процедуры доступа. К ним относятся: 
  • Бит разрешения альтернативной функции вывода "beeper”. При его установке соответствующий вывод переключатся из состояния порта общего назначения в состояние выхода генератора.

  • Бит выбора источника тактирования модуля - CKAWUSEL, определяющий в качестве генератора импульсов либо встроенный  RC-генератор LSI с частотой 128кГц, либо основной системный генератор HSE с внешним кварцевым резонатором;

          CKAWUSEL = 0: значение по умолчанию, источник тактирования для AWU и beeper LSI;
          CKAWUSEL = 1: источник тактирования для AWU и beeper HSE.

  • Биты PRSC[1:0] определяющие коэффициент деления частоты генератора HSE, если он выбран в качестве источника тактирования звукогенератора.
          PRSC[1:0] = 00: HSE 24 MHz -> 128 kHz;
          PRSC[1:0] = 01: HSE 16 MHz -> 128 kHz;
          PRSC[1:0] = 10: HSE   8 MHz -> 128 kHz;
          PRSC[1:0] = 11: HSE   4 MHz -> 128 kHz.
  
      
 
     Процедура программного обращения к байтам конфигурации STM8 предусматривает предварительную разблокировку этой области flash-памяти записью двух кодовых байт в специализированный регистр разблокирования, а также записью в соседнюю для конфигурационного байта ячейку побитно инвертированной копии его основного значения.
  
     Для записи указанных байтов могут быть использованы библиотечные функции от STM:
       
   void FLASH_Unlock(FLASH_MemType_TypeDef MemType)
   void FLASH_ProgramOptionByte(u16 Address, u8 Data) 

  
   
     Первая из них, при вызове с параметром FLASH_MEMTYPE_DATA, разблокирует область конфигурационных регистров flash-памяти, вторая, осуществляет запись значения Data в конфигурационный байт с адресом Address. Для определения адресов байтов конфигурации "STM8S_Reference manual” рекомендует сверяться с DataSheet на конкретный микроконтроллер.
     Значения битов  CKAWUSEL и PRSC по умолчанию позволяют начать работу с тактированием от встроенного генератора  LSI 128кГц и единственное в чём остаётся потребность - разрешить альтернативную функцию вывода установкой бита AFR7 конфигурационного регистра OPT2:
 
   
   #include "stm8s.h"
   #include "stm8s_flash.h"
   #define OPT2  0x4803 // Адрес конфигурационного регистра OPT2.
   #define AFR7  7 // Бит выбора альтернативной функции beeper в OPT2.
   FLASH_Unlock (FLASH_MEMTYPE_DATA); // Разблокировать область данных FLASH.
   FLASH_ProgramOptionByte(OPT2, 1<<AFR7);
// Разрешить beep в регистре OPT2.
  
   

§ > Управление работой генератора
   
     Частота звуковых сигналов определяется комбинацией битов пятиразрядного делителя входной частоты  BEEPDIV регистра BEEP_CSR:
     BEEPDIV[4:0]=  0: BEEPDIV = 2;
     BEEPDIV[4:0]=  1: BEEPDIV = 3;
     ...
     BEEPDIV[4:0]= 30: BEEPDIV = 32;
     и трёхразрядного делителя BEEPSEL:
     BEEPSEL[1:0] =00: fLS/(8 x BEEPDIV) kHz output;
     BEEPSEL[1:0] =01: fLS/(4 x BEEPDIV) kHz output;
     BEEPSEL[1:0] =1x: fLS/(2 x BEEPDIV) kHz output;
 
     Включение и выключение сигнала осуществляется установкой и сбросом бита BEEPEN этого же регистра.

     Программа последовательного воспроизведения звукового сигнала на 32 разных частотах:
  
     #include "stm8s.h"
     #include "stm8s_flash.h"
     void main( void )
     {
              CLK->ECKR|=CLK_ECKR_HSEEN; // Разрешаем работу генератора с внешним кварцем (HSEEN)
              CLK->SWCR|=CLK_SWCR_SWEN; // Разрешаем переключение генераторов
              CLK->SWR=0xB4; // Сlock от кварцевого генератора (HSE)
              while(CLK->CMSR!=0xB4); // Ждем стабилизации частоты
              CLK->CKDIVR=0;
              FLASH_Unlock(FLASH_MEMTYPE_DATA); // Разблокировать область данных FLASH.
              FLASH_ProgramOptionByte(0x4803, 1<<7); // Разрешить beep в регистре OPT2. 
              BEEP->CSR=0; // Предочистка регистра beep.
              BEEP->CSR|=BEEP_CSR_BEEPEN; // Разрешить генератор.
              char FreqNum=30; // Значение делителя частоты.
              while(1)
              {
                     for(long i=50000;i;i- -) asm("nop"); // Задержка.
                     BEEP->CSR&=~BEEP_CSR_BEEPDIV; // Сброс битов делителя.  
                     BEEP->CSR|=FreqNum&BEEP_CSR_BEEPDIV; // Запись битов делителя.
                     if (FreqNum) FreqNum- -; else FreqNum=30; // Декремент значения делителя.
              }
      }
      
 
     Проект под IAR STM8 >> stm8beeper.rar


При использовании материалов сайта ссылка на данный источник обязательна.

Категория: STM8 | Добавил: eugenemcu (06.12.2010) | Автор:

Просмотров: 7473 | Рейтинг: 4.5/2 |
Всего комментариев: 0
Статистика

Наш магазин




Какую среду разработки Вы используете?

[ Результаты · Архив опросов ]
Всего ответов: 1556



Им нужна Ваша помощь: