Open
Description
I have experienced some problem.
On the Arduino nano Atmega328,
INT0 and SPI can't do their jobs concurrently.
-
I have made the toggle wave (8.3333mSec Period) externally and
input it into the pin 2 -
I have made a test code for that as belows
if I have blocked the code line
//SPCR |= _BV(SPE);
then INT0 interrupt handler "void PCI_ZC1()" called and 8.333mSec period LED Toggling can
be shown by oscilloscope.
but if // is removed.. There is no LED Toggling on Oscilloscope...
Does SPE bit of SPCR determs the INT0 or BUILTIN LED or function digitalWrite()?
-------------------------------------
#define _sclk 13
#define _miso 12
#define _mosi 11
#define _cs 10
#define _dc 9
#define _rst 8
#define ZC1 2
#define ZC2 3
//uint8_t _cs, _dc, _rst, _mosi, _miso, _sclk,
//uint8_t mosipinmask, clkpinmask, cspinmask, dcpinmask;
// volatile uint8_t *mosiport, *clkport, *dcport, *rsport, *csport;
unsigned char state;
//--------------------------------------------------
void INT0_Handler()
{
state=!state;
digitalWrite(LED_BUILTIN,state);
}
//----------------------------------------------
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN,OUTPUT);
pinMode(ZC1,INPUT); //no pullup
attachInterrupt(digitalPinToInterrupt(ZC1),INT0_Handler,CHANGE);
//
pinMode(_rst, OUTPUT);
digitalWrite(_rst, LOW);
pinMode(_dc, OUTPUT);
pinMode(_cs, OUTPUT);
//csport = portOutputRegister(digitalPinToPort(_cs));
//dcport = portOutputRegister(digitalPinToPort(_dc));
//cspinmask = digitalPinToBitMask(_cs);
//dcpinmask = digitalPinToBitMask(_dc);
SPCR |= _BV(MSTR);
//SPCR |= _BV(SPE);
}
void loop() {
// put your main code here, to run repeatedly:
}