115 lines
3.4 KiB
Forth
115 lines
3.4 KiB
Forth
\ **********************************************************************
|
|
|
|
\ ff-328p.fs - Atmega328P definitions and communications
|
|
|
|
\ Copyright 2020, 2021 Christopher Howard
|
|
|
|
\ SPDX-License-Identifier: Apache-2.0
|
|
|
|
\ Licensed under the Apache License, Version 2.0 (the "License");
|
|
\ you may not use this file except in compliance with the License.
|
|
\ You may obtain a copy of the License at
|
|
|
|
\ http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
\ Unless required by applicable law or agreed to in writing, software
|
|
\ distributed under the License is distributed on an "AS IS" BASIS,
|
|
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
\ or implied. See the License for the specific language governing
|
|
\ permissions and limitations under the License.
|
|
|
|
\ The purpose of this module is to provide
|
|
\ 1. 328P register and port definitions
|
|
\ 2. words to assist in MC communications (e.g., SPI)
|
|
|
|
\ Reference the ATmega328P data sheet for the meanings of the of the
|
|
\ register and port definitions. It is available at
|
|
|
|
\ https://ww1.microchip.com/downloads/en/DeviceDoc/
|
|
\ Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
|
|
|
|
\ Public words:
|
|
\ PORTB PORTC PORTD DDRB DD_OUT DD_IN DDRD DDR_SPI DD_SS DD_MOSI
|
|
\ DD_SCK SPCR SPR0 SPR1 CPHA CPHA_SMPTRL CPHA_SMPLED CPOL CPOL_HIDLE
|
|
\ CPOL_LIDLE MSTR MSTR_MSTR MSTR_SLAVE DORD DORD_LSB DORD_MSB SPE
|
|
\ SPE_ENAB SPE_DISAB SPIE SPIE_ENAB SPIE_DISAB SPSR SPI2X WCOL SPIF
|
|
\ SPDR tx-spi 2tx-spi
|
|
|
|
\ **********************************************************************
|
|
|
|
328p
|
|
marker 328p
|
|
|
|
\ **********************************************************************
|
|
\ I/O port addresses
|
|
\ **********************************************************************
|
|
|
|
$25 constant PORTB
|
|
$28 constant PORTC
|
|
$2b constant PORTD
|
|
|
|
\ **********************************************************************
|
|
\ Data Direction Registers
|
|
\ **********************************************************************
|
|
|
|
$24 constant DDRB
|
|
1 constant DD_OUT
|
|
0 constant DD_IN
|
|
$2a constant DDRD
|
|
|
|
\ **********************************************************************
|
|
\ DDR for SPI comms
|
|
\ **********************************************************************
|
|
|
|
$24 constant DDR_SPI
|
|
$2 constant DD_SS
|
|
$3 constant DD_MOSI
|
|
$5 constant DD_SCK
|
|
|
|
\ **********************************************************************
|
|
\ SPI control register
|
|
\ **********************************************************************
|
|
|
|
$4c constant SPCR
|
|
$0 constant SPR0
|
|
$1 constant SPR1
|
|
$2 constant CPHA
|
|
1 constant CPHA_SMPTRL
|
|
0 constant CPHA_SMPLED
|
|
$3 constant CPOL
|
|
1 constant CPOL_HIDLE
|
|
0 constant CPOL_LIDLE
|
|
$4 constant MSTR
|
|
1 constant MSTR_MSTR
|
|
0 constant MSTR_SLAVE
|
|
$5 constant DORD
|
|
1 constant DORD_LSB
|
|
0 constant DORD_MSB
|
|
$6 constant SPE
|
|
1 constant SPE_ENAB
|
|
0 constant SPE_DISAB
|
|
$7 constant SPIE
|
|
1 constant SPIE_ENAB
|
|
0 constant SPIE_DISAB
|
|
|
|
\ **********************************************************************
|
|
\ SPI status register
|
|
\ **********************************************************************
|
|
|
|
$4d constant SPSR
|
|
$0 constant SPI2X
|
|
$6 constant WCOL
|
|
$7 constant SPIF
|
|
|
|
\ **********************************************************************
|
|
\ Transmitting data over SPI
|
|
\ **********************************************************************
|
|
|
|
$4e constant SPDR
|
|
|
|
: tx-spi ( c -- )
|
|
SPDR c! begin SPSR c@ 1 SPIF lshift and until
|
|
;
|
|
|
|
: 2tx-spi ( u -- ) dup high-byte tx-spi low-byte tx-spi ;
|