Пн май 21, 2012 21:19:00
#include <avr/io.h>
#include <util/delay.h>
#define BLINK_DELAY_MS 1000
int main( void )
{
PORTA.DIRSET = 0b00000001 ; // Set pin 0 to be output.
while(1){ // loop forever
PORTA.OUTSET = 0b00000001 ; // set the output high.
_delay_ms( BLINK_DELAY_MS ) ; // wait.
PORTA.OUTCLR = 0b00000001 ; // set the output low.
_delay_ms( BLINK_DELAY_MS ) ; // wait.
}
}
Пн май 21, 2012 23:08:56
Вт май 22, 2012 02:14:35
Вт май 22, 2012 12:17:36
ldi r17,0b00000010
ldi r16,0xD8
sts OSC_RC32MEN_bm,r17; Включить RC ген-р
sts OSC_RC32MRDY_bm,r17; Ожидание готовности
sts CPU_CCP,r16; отключение защиты
sts CLK_SCLKSEL1_bm,r17; ну и типа перевод на этот генератор...
Вт май 22, 2012 12:23:22
neurofunk писал(а):Кто-нибудь может помочь выставить частоту на внутренний RC генератор 32МГц?
В AVR симулятор частота остается 1,000 МГц... А так.. На глаз не знаю как проверить)
Вт май 22, 2012 12:45:49
Вт май 22, 2012 12:52:02
settings:
;Частота:
;----------
ldi r17,0x02 ; Загрузка необходимых значений в регистры
ldi r19,0b00000001
ldi r16,0xD8
;----------
sts osc_ctrl,r17 ; Включаем RC32MEN т.е. генератор на 32МГц
sts OSC_STATUS,r17 ; Типа проверка готовности, видимо я не так сделал тут что-то
rcall delay1 ; ВЫЗОВ ЗАДЕРЖКИ, БЕЗ НЕЁ НЕ ПАШЕТ
sts CLK_LOCK,r19 ; Регистр блокировки изменения системной частоты
sts CPU_CCP,r16 ; Тоже еще одна блокировка важных, эм, короче изменений регистров
sts CLK_CTRL,r19 ; Собственно вот само использование RC32MEN
;----------
delay1:
ldi r20,255
ldi r21,255
mov r25,r20
mov r26,r21
loop1:
subi r25,1
sbci r26,0
brcc loop1
ret
;----------
Пт авг 10, 2012 18:53:04
; Частота 32Мгц от внутреннего генератора
LDI r16,0xD8 ; загрузка сигнатуры (вместо 0xD8 можно вставить CCP_IOREG_gc)
sts CPU_CCP,r16 ; отключаем защиту ядра от изменений важных конфигурации
LDI r16,OSC_RC32MEN_bm ; маска включения RC32MEN
sts OSC_CTRL,r16 ; само включение
status_chek:
LDI r16,OSC_STATUS ; адекватная проверка статуса готовности генератора
sbrc R16,1 ; если бит 1 установлен в OSC_STATUS (готовность RC32MEN) то пропустить след. строку
rjmp status_chek
LDI r16,0xD8
sts CPU_CCP,r16
LDI r16,CLK_SCLKSEL_RC32M_gc ; перевод системы на
sts CLK_CTRL,r16
Сб авг 11, 2012 07:55:30
Сб авг 11, 2012 17:04:15
Сб авг 11, 2012 17:59:12
Вс авг 12, 2012 08:33:11
; Стек:
LDI R16,Low(RAMEND)
sts CPU_SPL,R16
LDI R16,High(RAMEND)
OUT CPU_SPH,R16
; Посветим светодиодом
LDI r16,0b11111111
STS PORTA_DIRset,r16
STS PORTA_OUTSET,r16
nop
nop
nop
Вс авг 12, 2012 08:59:19
Dima89 писал(а):Парни!!! Помогите!! Это бред какой-то
sts CPU_SPL,R16
OUT CPU_SPH,R16
Вс авг 12, 2012 09:05:17
Вс авг 12, 2012 09:06:29
Вс авг 12, 2012 09:09:18
LDI r16,0b11111111
STORE PORTE_DIR,r16
STORE PORTE_OUT,r16
Вс авг 12, 2012 09:49:35
Вс авг 12, 2012 10:02:16
BOB51 писал(а):и обучалку и оригинальный datasheet
а при использовании чужих программ (в том числе и *def.inc и прочих *inc) не мешало бы их содержимое для начала хотя-бы прочитать (а лучше распечатать и ознакомится)
ассемблер - не Сиии - тут собственными мозгами шевелить надо!
Пн авг 13, 2012 08:40:20
Пн авг 13, 2012 08:49:40
;32Мгц от внутреннего генератора
LDI r16,OSC_RC32MEN_bm
store OSC_CTRL,r16 ; инициализация генератора
chek: ; проверка готовности
load r16,OSC_STATUS ; загружаем в регистр значение OSC_STATUS
SBRS r16,1 ; если бит 1 будет установлен, то идем дальше
rjmp chek ; если нет, то опять проверяем
LDI r16,0xD8 ; отключаем
store CPU_CCP,r16 ; защиту
LDI r16,CLK_SCLKSEL_RC32M_gc ; выбираем источник
store CLK_CTRL,r16 ; тактового сигнала от RC32MEN