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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  @) ]8 Y7 k2 [3 _$ r4 c7 rmain文件:, z. C- I8 f: `) I0 e
interrupt void interrupt4(void)  % a& n2 k0 V( ^. W, B. x2 \
{
# V$ b; u$ v9 d; C5 Z  Uint32 sample;
# Z7 A+ G8 J, t: Y$ @+ h9 n0 z$ }9 c
  sample = input_sample(); // read L + R samples from ADC3 P3 j  C# ]0 ?
  output_sample(sample);   // write L + R samples to DAC - T9 C: e6 p/ H0 u: @
  return;
7 i2 O* c: c5 l! w}% j6 _! u- d2 X0 ?# ?) U! _8 E" ]

; p, O, B; l3 [0 W" a. @int main( void )" ~! g* I2 X8 K( t3 ?. N% B
{. b# _& v$ j6 z, w

2 w, V9 B4 D3 A: C    /* Initialize BSL */: B# x4 I# L% N. R( W6 h/ |
    EVMC6747_init( );3 e6 I- u' \4 B+ y! P! \  b9 J
        /* Call evmc6747_intr function */
) m: G- S/ t  u# o    aic3106_init( );
$ D3 w# S; P/ k( o7 j- u# }2 V5 z        while(1);
1 Y" m) W3 |/ g# j# \% j1 m}4 r$ q- W1 y) J1 e4 u

* G6 d# ]& z, G6 {( s, e  h; P4 j% j3 R) m6 T/ Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! I' a5 v7 L' ~! B/* Initialize MCASP1 */
0 ?: h4 }. ?/ \3 R    mcasp = &MCASP_MODULE_1;, I8 D) B) o' x/ F' [
    mcasp->regs->GBLCTL  = 0;       // Reset& }5 x" Z/ s& C$ w' ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" b/ y: X) d% p6 _    mcasp->regs->XGBLCTL = 0;       // Reset TX* t4 f+ J# c  ]0 o3 M2 S
    mcasp->regs->PWRDEMU = 1;       // Free-running
! T: ^5 o- C( W# S( v   // configure McASP0 receive registers( b* a; v+ C% b. R0 I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ |: r1 q$ A7 L# u7 u  W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: p/ {$ N4 {2 i. X2 G- r. `
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ j$ _. [; E# C0 Y! W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; q; m3 }  T( {) m& V  \3 {    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 Z6 w+ t% O2 i+ x    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 i, D7 ~5 r: a6 v7 i) |
    mcasp->regs->RINTCTL    = 0x00000000; // Not used$ ^. v0 a3 Q( h2 A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, a4 I. [* |  y; v# R. _, q

9 b! u* F9 ]0 _8 r* L    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  N+ X0 v; W/ G; m* g$ @: |& `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 b1 P1 i& T4 z7 }: f% M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- ?/ @! ?! G: c  Y) [9 Z9 k* L
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# d- }; m3 b- A- H
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( W+ v4 v; [$ H7 w( F
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# k  |. P- m$ X! R# h% N
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& q3 Q7 @% c, T0 u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 U" B9 z/ G# \. u9 ^$ c

" S3 I5 ^, j9 x9 e; Z6 x9 H    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" Q2 w9 \! U) |* Z% c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 z/ t. N0 A! l8 C) j1 e% |1 J
    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 o% p2 A  W7 G! i4 d4 w    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 D$ l- z& @" \; B1 H' t! X. Y- G  `
; ]3 P+ E5 i$ Q' f+ |6 ]. g
    mcasp->regs->DITCTL     = 0x00000000; // Not used6 x/ b3 k" r" R$ m' k4 ]7 A2 x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used% R% \1 p; |7 l- _. M# S$ P6 G
    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 c+ r- X  T3 @0 j; L3 \. Q) Q, |/ c' C/ ^& R/ ~
/* Starting sections of the McASP*/
# |2 v* y/ {) V4 |/ F* L8 a0 W    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( h, [  r! E! y+ d8 |, s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! X2 a8 \( S2 Q7 ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 C" N! N$ i) p- p9 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 }5 K+ s, b0 V0 k' S; B% J8 O6 r0 `: E; Z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 y0 [$ L# l$ O( v- I5 ?% t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, W5 y& q+ |1 R: S) H
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 T% t7 S: K" H8 O; k+ K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& x! I1 v2 [4 t) d# G2 z% e1 t
' f0 Q6 o: T  `0 M% l0 S2 [2 B; W9 S
    mcasp->regs->XSTAT = 0x0000ffff; ' P+ B* @! h* f9 a! m
    mcasp->regs->RSTAT = 0x0000ffff;
, T/ p1 h, J7 m9 v' q- G9 @
2 w+ x7 {3 {) R2 ]0 E. g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! ]- L7 [; g) p9 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 ?5 ^. M: H8 B& d% e    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 r; m& X! }1 A& g. K# D; ~7 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. I5 I, `; `, T' F0 [4 F6 C- p! J! Y" t) G$ @" \+ A- I' W
    /* Write a 0, so that no underrun occurs after releasing the state machine */& m% S, s" r1 }  l6 F3 h1 [3 ~
    mcasp->regs->XBUF5 = 0;
4 j7 |5 r8 d6 Q" f9 H! T# c2 I    mcasp->regs->RBUF0 = 0;/ {, w" m2 j3 d/ C
( `9 e, d) k6 o. u" n, x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 X) E. M+ h5 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' F0 S) L9 k6 }$ x0 t    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 b$ Y" Q7 Z, w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* T- n! A- Z0 j  |/ j7 L9 n4 A& K6 D  D) x5 C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ u1 Y4 g8 ^% P$ v5 O; i& T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! {2 A- C: [& Y8 K) {, I* [    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 N$ ~- B3 m5 x# D3 u: z% E' G* Y% a- ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; g" c/ A2 W& G* p  J6 [6 \. w6 g: |5 s! b" Q2 p7 I$ C* q
    CSR = 0x0000;3 u" E) _* k" u5 u" ]
    INTC_INTMUX1 = 0x3d;
% D( [2 L! b9 d9 c, T    ISTP = (unsigned int)vectors;
; N) P1 ~9 l- J8 e/ a9 ^; _    ICR = 0xFFF0;  6 Y, J# S, T7 i, _+ N/ x
    IER |= 0x12;  ! U! z7 v/ `, o
    CSR |= 0x01;  
% ?8 o: ?% Z6 j% P6 {
" y+ f* c- e1 c, m# H. C
* ^. D. O* n& Y: W
2 i, P3 d: `" O: ]还有就是两个输入输出函数:: z2 l- o3 ]5 f3 ~7 u  q2 G
void output_sample(Int32 out_data)& q7 g! _5 Z6 x! D/ w9 S! k
{
- L4 s: {2 Y$ h1 G! U" s: U  AIC31_data.uint = out_data;  
" g  Z1 U( x7 o( |! H- ~9 q  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: a7 C! h4 j; ~" h) A- s0 w& b}% j8 ~& {3 w; K
+ s& h& ?5 D/ R" a8 w
Int32 input_sample(void)  P' I- v+ D# M& h! `- n# z. F0 k
{  
# r# y, }4 `; y& {8 b  AIC31_data.uint = MCASP1_RBUF0_32BIT;- j% o, C  B! o  a8 s) Y! A
  return (AIC31_data.uint);* r$ C6 U. L8 L: H3 ?
}
' {+ C6 c! ~$ Z$ y( ?+ [1 V5 K; H, z6 n- D& N
分享到:  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-23 15:10 , Processed in 0.042280 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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