I have experienced some problem.
On the Arduino nano Atmega328,
INT0 and SPI can't do their jobs concurrently.
1.I have made the toggle wave (8.3333mSec Period) externally and
input into the pin 2
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?
#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 zc1Value,zc2Value,oldZc1Value,oldZc2Value;
//--------------------------------------------------
void PCI_ZC1()
{
zc1Value=digitalRead(ZC1);
if(zc1Value!=oldZc1Value)
{
oldZc1Value=zc1Value;
digitalWrite(LED_BUILTIN,zc1Value);
}
}
//----------------------------------------------
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN,OUTPUT);
pinMode(ZC1,INPUT); //no pullup
attachInterrupt(digitalPinToInterrupt(ZC1),PCI_ZC1,CHANGE);
//
pinMode(_rst, OUTPUT);
digitalWrite(_rst, LOW);
pinMode(_dc, OUTPUT);
pinMode(_cs, OUTPUT);
SPCR |= _BV(MSTR);
//SPCR |= _BV(SPE);
}
void loop() {
// put your main code here, to run repeatedly:
}