В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Применение > Микроконтроллеров > MSP430
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Демонстрационная программа F149VoiceDemo.s43

;*****************************************************************************
; ЭТА ПРОГРАММА ПОСТАВЛЯЕТСЯ В ВИДЕ "КАК ЕСТЬ". КОМНАИЯ TI НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ 
; И НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ВОЗМОЖНЫЕ НЕТОЧНОСТИ 
; РАБОТЫ ИЛИ НЕПРАВИЛЬНОСТЬ РАБОТЫ ПРОГРАММЫ.
; ПРИ КОММЕРЧЕСКОМ ИСПОЛЬЗОВАНИИ ДАННОЙ ПРОГРАММЫ
; КОМПАНИЯ TI ОТКАЗЫВАЕТСЯ ОТ АВТОРСТВА И СНИМАЕТ 
; С СЕБЯ ВСЯКУЮ ОТВЕТСТВЕННОСТЬ.
;
; КОМПАНИЯ TI ОТКАЗЫВАЕТСЯ ОТ ЛЮБЫХ ГАРАНТИЙ В ОТНОШЕНИ ТОГО,
; ЧТО ПРОГРАММА НЕ МОЖЕТ ПРИНИСТИ ПРЯМЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ ИЛИ 
; ПОТЕРЮ ДОВЕРИЯ ИЛИ ПРИБЫЛИ
; ПРИ ИСПОЛЬЗОВАНИИ ЕЕ ТЕОРИИ ИЛИ АЛГОРИТМОВ.
; ОТВЕТСТВЕННОСТЬ ПРИ КОММЕРЧЕСКОМ ИСПОЛЬЗОВАНИИ 
; ДАННОЙ ПРОГРАММЫ ПОЛНОСТЬЮ ЛЕЖИТ НА ЛИЦЕ, ИСПОЛЬЗОВАВШЕМ 
; ДАННУЮ ПРОГРАММУ
;
; Если не указано иное, программа, созданная компанией 
; Texas Instruments поставляется на условиях "свободно распространяемого
; программного обеспечения". 
; Вы можете свободно изменять программу без всяких ограничений
; Передавать программу третьим лицам можно только при 
; доведении до их сведений этих условий и при 
; его согласии с этими условиями.
; Вы должны приводить лицензию в каждой копии или частичной копии.
;
; Вы признаете и соглашаетесь, что Программа содержит
; защищенный авторским правом материал, коммерческую тайну и другую частную информацию 
; компании TI и защищена в соответствии с законами об авторском праве,
; международным соглашением об авторском праве и законом о коммерческой тайне, а так же 
; законом об охране интеллектуальной собственности. Для защиты авторских прав компании TI 
; Вы соглашаетесь не де компилировать, перерабатывать,
; или преобразовывать программу 
; к удобочитаемому виду. Вы соглашаетесь
; ни в коем случае не изменять и не удалять внесенную в программу информацию 
; об авторском праве. Компания TI оставляет за собой все права,
; не оговоренные в данной лицензии. Кроме
; того, что оговорено в данной лицензии, не может рассматриваться
; при возможном судебном разбирательстве.
;
; Вы не можете использовать программу для микроконтроллеров, которые не производит компания TI

NAME F149VoiceDemo ; Цифровой диктофон на микроконтроллере MSP430F149 с FLASH памятью
;Автор: Murugavel Raju
; Компания Texas Instruments, Inc
;******************************************************************************
#include "msp430x14x.h"
;******************************************************************************
; Микроконтроллер работает на частоте 3.58 МГц
;
; Определение констант
FS 		equ 	001h
Memstart 	equ 	1401h
Memend 	equ 	0fe01h
;******************************************************************************
RSEG 	CSTACK
DS 	0
;******************************************************************************
RSEG 	CODE
;******************************************************************************
RESET 
    mov.w   #SFE(CSTACK),SP     ; определение указателя стека
    call    #Init_Sys   ; Инициализация системы
    mov.b   &P1IN,R5    ; проверка состояния вывода P1.1 для определения режима
    and.b   #BIT4,R5    ; Маскирование Bit4 для проверки состояния кнопки 'Record'
    jnz     Play        ; Переход по метке Play если кнопка не нажата
    call    #Erase      ; Вызов подпрограммы очистки Flash памяти
    xor.w   #FXKEY+WRT,&FCTL1  ; Активизация FLASH памяти для записи
    bis.b   #BIT0,&P1OUT       ; Включение светодиода
Play
    eint                ; Разрешение прерываний
    mov.w  #Memstart,R14       ; Пересылка начального адреса памяти в регистр R14
Mainloop
    jmp    $            ; Зацикливание, выход только по прерыванию
;******************************************************************************
TB7_ISR; Подпрограмма обработки прерывания таймера Timer B7, сохранение длительности 
; записи и пересылка этих данных для проигрывания
;******************************************************************************
    bit.b   #BIT4,R5    ; Проверка нажатия кнопки выбора режима
    jnz     Play1       ; Если не нажата, то переходим к метке Play1
    bic.w   #ADC12SC,&ADC12CTL0    ; Начало преобразования
Conv_tst
    bit.w   #ADC12BUSY,&ADC12CTL1  ; Ожидание окончания преобразования
    jc      Conv_tst    ; Зацикливание до окончания преобразования
    bis.w   #ADC12SC,&ADC12CTL0    ; возврат в режим выборки
    mov.w   &ADC12MEM0,0(R14)      ; Запись слова во FLASH память
    incd.w  R14         ; Увеличение счетчика
    cmp.w   #Memend,R14 ; Проверяем, заполнена ли память
    jnz     Proceed     ; Если память не заполнена, то переходим к обработке
    bic.b   #BIT0,&P1OUT           ; Если память заполнена, то выключаем светодиод
    xor.w   #FXKEY+WRT,&FCTL1      ; Запрещаем запись во FLASH память
    xor.w   #FXKEY+LOCK,&FCTL3     ; Блокировка FLASH памяти
    jmp     RESET       ; Начинаем сначала (если кнопка отжата, то начнем 
; воспроизведение)
Play1
    mov.w   @R14,R15    ; Считывание данных из указателя памяти
Incd.w
    R14                 ; Дублирование увеличение указателя для перехода
                        ; к следующему слову данных
    cmp.w   #Memend,R14 ; Проверка достижения конца массива памяти
    jnz     Go_on       ; Переход к метке Go_on если конец не достигнут
    jmp     RESET       ; переходим к началу если достигнут конец массива памяти
Go_on
L1  bit.b   #UTXIFG0,&IE1    ; Зацикливание до тех пор, пока предыдущая передача 
    jc      L1          ;не закончится и буфер не очистится
    bis.b   #FS,&P3OUT  ; Кадровый импульс синхронизации
    bic.b   #FS,&P3OUT  ; для начала загрузки в TLV5516 
; следующего слова данных
    swpb    R15         ; меняем местами байты в регистре R15
    mov.b   R15,&TXBUF0 ; пересылка старшего байта в TXBUF модуля SPI
    swpb    R15         ; Меняем местами байты в регистре R15
    mov.b   R15,&TXBUF0 ; Пересылка младшего байта в TXBUF модуля SPI
Proceed
    reti                ; Выход из подпрограммы обработки прерывания
;******************************************************************************
Init_Sys; Настройка периферийных модулей
;******************************************************************************
StopWDT
    mov.w   #WDTPW+WDTHOLD,&WDTCTL   ; Остановка сторожевого таймера
SetupBC
    bic.b   #XTOFF,&BCSCTL1          ; Активизация автогенератора на XT2
    call    #Delay      ; Задержка для обеспечения выхода автогенератора 
; в стабильный режим
    mov.b   #SELM1+SELS,&BCSCTL2     ; MCLK=SMCLK=XT2CLK
    bic.b   #OFIFG,&IFG1             ; Очистка OFIFG
SetupP1
    mov.b   #0h,&P1OUT      ; Очистка выходного регистра порта P1 
    bis.b   #0ffh,&P1DIR    ; Настройка всех линий порта P1 для работы в режиме выхода 
; Вывод P1.0 используется для управления светодиодом
    bic.b   #BIT4,&P1DIR    ; Для переключения выходов
SetupP2
    mov.b   #0h,&P2OUT      ; очистка выходного регистра порта P2 
    bis.b   #0ffh,&P2DIR    ; Неиспользуемые выводы переводятся в режим выходов
SetupP3
    bis.b   #00ah,&P3SEL    ; Линии порта P3.1 & P3.3 используются для SPI модуля
    bis.b   #FS,&P3OUT      ; Установка FS 
    bis.b   #0feh+FS,&P3DIR ; P3.0,3.1,3.3 и неиспользуемые выводы переводятся в режим выходов
SetupP4
    mov.b   #0h,&P4OUT      ; Очистка выходного регистра порта P4
    bis.b   #0ffh,&P4DIR    ; Неиспользуемые выводы переводятся в режим выходов
SetupP5
    mov.b   #0h,&P5OUT      ; Очистка выходного регистра порта P5 
    bis.b   #0ffh,&P5DIR    ; Неиспользуемые выводы переводятся в режим выходов
SetupP6
    bis.b   #BIT0,&P6SEL    ; P6.0 = A0 вход модуля ADC12 
    mov.b   #0h,&P6OUT      ; Выходные линии P6 используются для сброса
    bis.b   #0feh,&P6DIR    ; P6.1 - 6.7 выходы (неиспользуются)
SetupADC
    Call    #ADCset         ; Инициализация модуля ADC12
SetupUSART
    bis.b   #040h,&ME1      ; Активизация модуля USART 
    mov.b   #CHAR+SYNC+MM,&U0CTL     ; 8- битный модуль SPI в режиме ведущего
    mov.b   #CKPL+SSEL1+SSEL0+STC,&U0TCTL
; SMCLK для передачи, 3- проводный интерфейс
    mov.b   #02h,&U0BR0     ; SMCLK/2 для задания скорости обмена данными
    clr.b   &U0BR1          ;
    clr.b   &U0MCTL         ; Очистка модуляции
SetupCCR0
    bis.w   #CCIE,&TBCCTL0
    Mov.w   #649,&TBCCR0    ; Инициализация таймера TBCCR0 для выборки 
; с частотой 5.5 кГц
SetupTB7
    bis.w   #TBSSEL1+MC0,&TBCTL     ; Перевод ьаймера TimerB в режим UP 
SetupFlash
    xor.w   #FXKEY+FN2+FN1+FN0,&FCTL2
; Установка частоты генератора FLASH памяти 447.5 кГц
    ret                     ; Выход из подпрограммы
;******************************************************************************
ADCset; Инициализация модуля ADC12, VCC используется в качестве опорного напряжения
; Одноканальный (A0) режим однократного преобразования
;******************************************************************************
    bis.w   #ADC12ON+ADC12SC+ENC,&ADC12CTL0
; Включение АЦП и выборка входного сигнала
    call    #Delay          ; Задержка для стабилизации
    bis.w   #ADC12SSEL_1+ADC12SSEL_2,&ADC12CTL1
; ADC12 синхронизируется от SMCLK
    ret                     ; Выход из подпрограммы
;******************************************************************************
Erase; Инициализация FCTL и стирание FLASH памяти для новой записи
;******************************************************************************
    dint                    ; Запрещение прерываний
    xor.w   #FXKEY+LOCK,&FCTL3      ; Разблокирование FLASH памяти для записи
Test_Busy1
    bit.w   #BUSY,&FCTL3    ; Проверка флага BUSY 
    jnz     Test_Busy1      ; Зацикливание
    mov.w   #1400h,R13      ; Адрес начала массива памяти пересылается в регистр R13
NextSeg
    mov.w   #(FWKEY+ERASE),&FCTL1    ; Установки
    Clr.b   0(R13)          ; Выполнение макет записи для активизации 
; стирания сегмента
Test_Busy2
    bit.w   #BUSY,&FCTL3    ; Проверка флага BUSY 
    jnz     Test_Busy2      ; Зацикливание
    add.w   #200h,R13       ; Установка указателя на следующий сегмент
    cmp.w   #0fe00h,R13     ; Все сегменты очищены?
    jnz     NextSeg         ; Если нет, то переходим к очистке следующего сегмента
    ret                     ; Выход из подпрограммы
;******************************************************************************
Delay; Подпрограмма формирования задержки
;******************************************************************************
    push.w  #0FFFFh         ; Задержка до TOS
DL1
    dec.w   0(SP)           ; Уменьшение TOS
    jnz     DL1             ; Задержка окончена?
Incd.w
    SP                      ; Очистка TOS
    ret                     ; Выход из подпрограммы
;******************************************************************************
COMMON INTVEC ; Векторы прерываний MSP430F14x 
;******************************************************************************
ORG         TIMERB0_VECTOR
WDT_VEC     DW TB7_ISR      ; Обработка прерывания таймера Timer B7 
ORG         RESET_VECTOR
RESET_VEC   DW RESET        ; Обработка POR, внешнего сброса и сброса сторожевого таймера
END