C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6428|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* Q2 T9 d  q: q7 Omain文件:
& o. B+ d) z! `4 ^interrupt void interrupt4(void)  
# t. t% O& Z2 I- w' r{
/ ]# Z) m& ]5 E' S# }2 Y3 I$ z9 x  Uint32 sample;+ k2 y+ N$ B3 [/ q& L
8 ~, M5 D* y' w3 P5 R+ V% Z
  sample = input_sample(); // read L + R samples from ADC
2 y/ P9 b6 p# T/ Z& p  output_sample(sample);   // write L + R samples to DAC
  a& p" p/ v- M4 q  return;- j- j9 H# J# e% _6 x7 f
}
# [! z+ S% H7 i) O$ V; z5 c9 Q: b# h
int main( void )$ z  t3 u! S6 H0 D
{
4 J  ]& D9 S9 A* d2 v/ d9 _* l) |! w+ T7 E: k" \
    /* Initialize BSL */
/ ~) S0 ^" V' ^" d9 Z    EVMC6747_init( );3 q( A( p$ `: J% T
        /* Call evmc6747_intr function */
6 K% R3 V5 _9 \! O; w/ [    aic3106_init( );
. Y) p) i/ T) d  Z$ C; r        while(1);
" {" M5 _# f" u}
, x( F" S% |% h
; M: f( g) s3 c: W* k/ Y- Y: ?/ j( Q" g: q* _2 t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& p$ [& f( Y6 n: c8 s; b
/* Initialize MCASP1 */
! p# F1 _" Z. G  u  D& u6 W    mcasp = &MCASP_MODULE_1;) w6 R, A: D9 U; g+ C- H& q) o/ d# J
    mcasp->regs->GBLCTL  = 0;       // Reset
# I( P. h* E5 a& i$ Z  \1 ]8 q' R6 |    mcasp->regs->RGBLCTL = 0;       // Reset RX
, ]- p. n8 l, m: g" y! B- H3 j" S    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 U2 R" J" u: |    mcasp->regs->PWRDEMU = 1;       // Free-running
9 o( m% Z/ l2 X/ v   // configure McASP0 receive registers$ y7 j( |+ }: F5 B/ ^$ ?. o! i/ @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* l% a- X8 Y7 R. E1 E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# b- z* X% W) L2 [, I
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ f. E: ]! O, d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 h7 j$ h' X! o/ k    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 D& E1 c' L& W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ H$ ]7 A6 x) g3 h: v, g' `: n6 p    mcasp->regs->RINTCTL    = 0x00000000; // Not used: i/ T+ x! i9 ]8 H; d& Z+ t- [/ w, Z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; N) X& J% b9 z- M* q, g4 O8 _" L: n9 y$ j1 H9 ?6 d6 p. c$ J
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# P! N& X7 v8 I: d
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 L; \  \, o3 H6 \9 o/ n    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ R# Q: m3 k! B/ G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: [( _" Y- d' a" _* i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 e3 O1 q- L' x& [! W5 \- x0 a6 r
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! x( V, M) O% i" `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 A, h* O0 z% d
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; Y; S! D4 r" ]: N# O2 s1 G4 t
  U. m7 b2 G4 A8 b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) {3 w; G: ?) ^7 P5 o: O- J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. P$ U3 e5 d% B+ g
    mcasp->regs->PFUNC      = 0;          // All MCASPs
' ~4 V6 b1 Z7 s1 p( z* a) }    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 q8 n& |* s4 ?; R  A7 }

% i- I4 G2 I5 r# S1 {2 X* m    mcasp->regs->DITCTL     = 0x00000000; // Not used" ]$ |7 a) V; m7 G  }& L: [; {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used. n4 Y9 w; {& ?9 _9 k
    mcasp->regs->AMUTE      = 0x00000000; // Not used' Y# H0 [  ?; I/ C* T$ D. o$ U
" q% u8 w# g8 D7 f9 A; Y& I: x
/* Starting sections of the McASP*/6 l5 h1 D9 I6 n$ S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" M; z, @6 L' A  C. b7 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ U0 B, j4 N) M$ ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , [7 f; J6 D; V: v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ [/ @' H+ [; E; a( ]

6 v# v, x8 ~( U" |8 }# W    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # F7 y9 ?( J/ _1 c! L4 q5 `7 f8 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 j0 B6 n# D8 H& `' y# e4 i' D    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 q" o2 l5 l& H+ N) _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! D" B0 G9 |7 N; Q% S5 ]. i2 u8 t9 p# ~, F
    mcasp->regs->XSTAT = 0x0000ffff; ' j5 {2 X' [$ c% k: q
    mcasp->regs->RSTAT = 0x0000ffff; 2 |/ m* W1 K8 K2 ?" {. J

: B* I, J  s2 z6 J: i* s6 K    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: C( \7 a8 ^+ j$ s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" O7 N! o3 t! S* [! o) D, Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- n6 I# u6 Q+ l; X+ G: t- V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- A  b) b2 g/ ?. G# @  h& {/ b. @! m) Z) W! L
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 x/ ^/ O3 `$ W+ x: g( y
    mcasp->regs->XBUF5 = 0;
: U: b1 D* E* R+ C    mcasp->regs->RBUF0 = 0;+ G: R0 G$ t; r; t/ g7 ]7 E
. Z/ ~' b5 f, m% l
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! u& ^: n" o: l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" \' c- T% C( Y: j; `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" O. f* X' Z  t) a5 Y9 T" {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 R! I" C5 ^; [$ j0 U4 F: b
# Q) k7 I; `  s/ G3 q& o& J# B
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! X/ q" ~- j5 N  i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 o, L* \' p. U- X% z+ E( O* H; |# x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# @) x& H3 s& n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 Q7 A( P# L6 A+ M- z
: D* G, J* P# A: ?+ [    CSR = 0x0000;
  R5 t7 z' Z( @; J8 I& l    INTC_INTMUX1 = 0x3d;
1 D9 o# {7 q' ]4 J# c8 ^9 P  M7 P    ISTP = (unsigned int)vectors;
+ v4 @* r' h: S) ~4 S2 R    ICR = 0xFFF0;  
/ p3 r* k) L4 Y3 J3 f$ ]8 B    IER |= 0x12;  1 H/ D) F. ~' C8 E
    CSR |= 0x01;  
& O" F2 w8 ^; G  x, B; q' l, |8 j" r% z3 @- X/ \

" q5 z; T  r; R7 [  m
/ ~, z( r0 r4 G还有就是两个输入输出函数:
3 P; F; N& L1 w" [void output_sample(Int32 out_data)
& t3 j; {9 g( X{
8 O  ?1 w% E+ P1 R3 \  AIC31_data.uint = out_data;  4 @; t' ^4 [+ c8 D7 P: t; _
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 x( S5 X$ p, W6 ~}
. `8 j% j  v$ |# C9 n  W+ D7 C
  B8 ^3 k% h, x. N. g, xInt32 input_sample(void)
0 k$ s& b8 q( U7 z* K7 v5 d4 ]; c4 ~{  - U4 ?6 o$ `7 _( W
  AIC31_data.uint = MCASP1_RBUF0_32BIT;, K8 E5 {8 b4 o3 w/ m2 @
  return (AIC31_data.uint);
7 ^/ F; `( ?8 }* j}! q' W8 A9 M; M* L) i0 H: A% R; q

  g/ a0 C# R# [+ v7 s* t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-26 20:03 , Processed in 0.042061 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表