Advertisement
Guest User

Untitled

a guest
Apr 13th, 2013
1,148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #include "ov7670.h"
  2. #define F_CPU 16000000UL
  3. #include <stdint.h>
  4. #include <avr/io.h>
  5. #include <util/twi.h>
  6. #include <util/delay.h>
  7. /*register uint8_t nerd1 asm("r16");
  8. register uint8_t nerd2 asm("r29");
  9. register uint8_t nerd3 asm("r31");*/
  10. void error_led(void)
  11. {
  12. DDRB|=32;//make sure led is output
  13. PORTB|=32;//led on
  14. while (1) {}//wait for reset
  15. }
  16. void twiStart(void)
  17. {
  18. TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//send start
  19. while (!(TWCR & (1<<TWINT))) {}//wait for start to be transmitted
  20. if ((TWSR & 0xF8) != TW_START)
  21. error_led();
  22. }
  23. void twiWriteByte(uint8_t DATA)
  24. {
  25. TWDR = DATA;
  26. TWCR = _BV(TWINT) | _BV(TWEN);
  27. while (!(TWCR & (1<<TWINT))) {}
  28. if ((TWSR & 0xF8) != TW_MT_DATA_ACK)
  29. error_led();
  30. }
  31. void twiAddr(uint8_t addr,uint8_t typeTWI)
  32. {
  33. //This function does not do error checking
  34. TWDR = camAddr_WR;//send address
  35. TWCR = _BV(TWINT) | _BV(TWEN); /* clear interrupt to start transmission */
  36. while ((TWCR & _BV(TWINT)) == 0) ; /* wait for transmission */
  37. if ((TWSR & 0xF8) != typeTWI)
  38. error_led();
  39. }
  40. void wrReg(uint8_t reg,uint8_t dat)
  41. {
  42. //send start condition
  43. twiStart();
  44. twiAddr(camAddr_WR,TW_MT_SLA_ACK);
  45. twiWriteByte(reg);
  46. twiWriteByte(dat);
  47. TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);//send stop
  48. _delay_ms(1);
  49. }
  50. uint8_t rdReg(uint8_t reg)
  51. {
  52. /*
  53. Wire.beginTransmission(sensor_addr >> 1);
  54. Wire.write(regID & 0x00FF);
  55. Wire.endTransmission();
  56. Wire.requestFrom((sensor_addr >> 1),1);
  57. if(Wire.available())
  58. *regDat = Wire.read();
  59. delay(1);
  60. return(1);
  61. */
  62. uint8_t dat;
  63. twiStart();
  64. twiAddr(camAddr_WR,TW_MT_SLA_ACK);
  65. twiWriteByte(reg);
  66. TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);//send stop
  67. twiStart();
  68. twiAddr(camAddr_RD,TW_MR_SLA_ACK);
  69. TWCR = (1 << TWINT) | (1 << TWEN);//nack
  70. while ((TWCR & _BV(TWINT)) == 0) ; /* wait for transmission */
  71. dat = TWDR;
  72. TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);//send stop
  73. _delay_ms(1);
  74. return dat;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement