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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* d, [1 r1 t4 y- c) X3 t  o
main文件:+ I7 m7 C9 ?, V: U: `/ l
interrupt void interrupt4(void)  
+ S% r: o8 q4 b6 }{3 g5 @! D/ ]0 g% e( _0 E4 e
  Uint32 sample;# A$ {% `  A7 Y2 p/ Y! a% F

: k% `( c) R0 R9 J1 c  sample = input_sample(); // read L + R samples from ADC( O: O1 S, x8 }& W8 Z
  output_sample(sample);   // write L + R samples to DAC 3 W6 n+ q& A* e! K
  return;9 W2 T6 d3 k1 @3 w; P; r
}9 ^6 ]" A4 j# B+ w1 M4 n6 A2 Q" A
/ y6 C( W9 |# r; R
int main( void )) i. w( H* L- ^' _. p. R
{! }9 C2 R- Z! j4 Q! A$ A# s3 P, n& Y

0 y0 f9 ?6 z$ ?% \0 `1 n3 L+ t, p) o    /* Initialize BSL */
# i; Y( B+ M$ W3 v0 Q! ]4 Q! P    EVMC6747_init( );
/ M' `5 V) x* f# L2 i        /* Call evmc6747_intr function */
( W: x8 x, w) _1 t' e2 I6 n5 T3 x0 c    aic3106_init( );% p% j2 U. {7 R7 Y* M" z' g4 v1 P
        while(1);% b& V& c# t0 _* p
}
% K6 l6 L1 r% l- i, a. x: i4 W4 a
! h5 c- V7 e2 ~7 J' F6 Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. F, m$ s% b9 |- r' n3 n( Q1 p/* Initialize MCASP1 */
4 g8 ?5 u- h6 G' a: E    mcasp = &MCASP_MODULE_1;0 L+ y# ?- E, E" t3 Z2 @! h' w
    mcasp->regs->GBLCTL  = 0;       // Reset
" }' j- P9 C2 H6 V- Z8 l5 S! H    mcasp->regs->RGBLCTL = 0;       // Reset RX. ^" ?8 _8 y4 K% z  L* _+ \
    mcasp->regs->XGBLCTL = 0;       // Reset TX
: G9 Q% U/ y( {; b: E    mcasp->regs->PWRDEMU = 1;       // Free-running- u6 h2 D2 R1 s) B) Y2 G5 r, v, X
   // configure McASP0 receive registers
# Y3 C8 c  K" H    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, h! k6 s' F' |7 `% {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% @! P, k% k% r2 K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, g' o% _- o2 F6 A    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, m' K: ^( a: h3 I& M    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! Z0 K8 @) R/ B. J4 z0 t    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 K3 |. W( K5 X: ?( u6 E+ h
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( E- V" P1 g9 m' F( H% E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 {1 F: D0 I0 ]' g% h+ M
  B3 E) O" o3 S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 t$ ~3 }% \0 A8 b! W( B    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  r9 E% T- A. u
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. P+ ^$ v- n' b: \    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 k2 r5 d; u- H3 W% n  d
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' B9 k/ A$ b% c. X) y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! V& _, I( o/ l" |: |4 y% U
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. F' _( z' H( ?  h    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) s! [4 e. Q. ~- v

! y% U' A4 Q5 x+ a+ S) g* x. e, ^    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 F: D  Q4 u9 N$ N3 G$ U/ h
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! |( V1 }4 U0 }# {/ `, _( V7 b' M6 @    mcasp->regs->PFUNC      = 0;          // All MCASPs5 ^+ c$ n. c( V- e; Z- J+ {0 E. S. j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 e: @$ ^1 }/ @5 c9 t: Q
3 @0 k& f0 q) n( D6 b    mcasp->regs->DITCTL     = 0x00000000; // Not used, O- ~8 G3 \/ t6 |
    mcasp->regs->DLBCTL     = 0x00000000; // Not used. {3 g4 c, ^* i' ?
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 x7 \4 |0 D- `- e3 [4 ~
  r0 S4 K5 j  |; H5 l
/* Starting sections of the McASP*/" i- Z  n$ R' a1 ^* n" H% O3 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; }6 L% y! x5 q* w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  S% [8 M& b# F7 B    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ N2 p$ h, F' r* l8 R9 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: D# s# j  n. _1 X7 J+ M, U, r& k5 a# w
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' y! g+ G# v: M+ J! T" e, n& i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' ?! I/ C" f! S* z' I    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# C3 ^& E- r. Y" l5 F9 `) F4 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' ~9 w- c$ `+ w9 D" g+ N4 T' t4 u% I) f, z9 }( T
    mcasp->regs->XSTAT = 0x0000ffff; ( ]8 D) i) C2 Q+ `6 r- j) ^. O
    mcasp->regs->RSTAT = 0x0000ffff; + B6 _/ F, F* _3 j( h/ c; J6 i
6 }6 p( |% m0 b, ~2 G0 H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 ~' Q4 _8 C+ _1 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" R7 t$ H( V! [- K8 t# u! S2 z  c    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " |# d4 d  Y& E4 S1 @5 L8 A8 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 i$ p0 M6 F2 [9 z

9 r" v! K2 N# K- J* l- [+ T% v    /* Write a 0, so that no underrun occurs after releasing the state machine *// G" x% o2 F1 |
    mcasp->regs->XBUF5 = 0;7 `( f( d$ r$ u. q3 r
    mcasp->regs->RBUF0 = 0;4 |, `7 e# ]: D9 p

! u$ G/ b/ {/ W# r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : |0 F+ w* u. _  [4 b. X. @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- C3 c1 b, @4 S8 I$ p    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, g# S4 S8 Y6 R1 L; \8 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 _% K( P! m& M* u  {9 {

6 j) G, ~- [- K5 o% m    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# |5 K5 x0 c. |0 I! F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! f8 z% u3 o; @# U( Y. \. g
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 N2 [5 o, C9 N  S0 {' s2 W% r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 ]! t7 }1 x1 |/ G2 q; e% d# B: w, u- n  {) Y* L: U" K$ N  K
    CSR = 0x0000;
: ?7 T$ F' P: A2 B    INTC_INTMUX1 = 0x3d;
8 I4 D9 t" K7 x! j    ISTP = (unsigned int)vectors;
4 s* ^# T$ A% k7 M    ICR = 0xFFF0;  
# o2 K1 L) x2 K7 Q( V% E+ }    IER |= 0x12;  . y: I6 S; l. q7 U
    CSR |= 0x01;  1 v& H2 C8 u. q) h, p
8 Z( m1 s5 q6 U1 m6 d+ M
0 o, Y$ V2 R& R" U" Z) {5 ]
' ]# C8 w4 ^  Q$ k; D- Z8 g& }
还有就是两个输入输出函数:2 o+ j- k. H$ X) r1 U1 ^) F# ]- ^
void output_sample(Int32 out_data)
2 ^+ L% k& \9 t7 {{( P& O  J+ t( w/ W
  AIC31_data.uint = out_data;  
$ W/ N- v8 S6 w  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ k: |4 O, n% U9 c; J3 E- O}: g6 X, ^: R3 i- J/ Q% F5 m
* b6 u" F3 p# l+ M( l5 Z
Int32 input_sample(void)4 ]! t- r9 [) [1 W' A5 w
{  2 [& M0 g; K) j4 @0 O  V1 D  Z; ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& Q& F6 x) I* H" @2 j8 o5 C5 p5 z  return (AIC31_data.uint);  ?( J$ s5 f1 B% M0 @
}
4 |3 R; U, K( U, N
/ y: F; W5 U2 Q$ h9 q' B
分享到:  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-3-24 16:57 , Processed in 0.044436 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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