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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! w. m- o" t- |, ^4 P2 ~6 p8 r
main文件:
3 A4 T$ `. j( _  E0 p& dinterrupt void interrupt4(void)  6 k1 l7 f) z  I: |
{5 ?" t& N& B) n- T! S% h6 E* ^3 y, `
  Uint32 sample;
/ t0 L1 F+ G% `) x, B9 m; T. w6 e6 g# U: d
  sample = input_sample(); // read L + R samples from ADC+ N* z# C- J; K5 Z. s
  output_sample(sample);   // write L + R samples to DAC 0 C; M& D. H' n) p# T
  return;" k7 o0 K) D8 D% ?) _1 m& [
}& D' O! x; Q: w, h

7 I. }2 M& J5 {8 C. Oint main( void )
$ ^8 o  L+ c+ x9 R% H3 U, Z! n3 b1 B{  V" z0 h' I- u, O
" g2 g4 ^2 M9 v# n; Y+ a( f
    /* Initialize BSL */
/ i1 u" Y  Y2 v5 G& M: i    EVMC6747_init( );& N& B5 Z4 K# P1 J( v
        /* Call evmc6747_intr function */
; `, [' m& @- s) X' L    aic3106_init( );& a  f* U( g: {9 k# n5 L% |
        while(1);. s; z. E" \* c2 }4 P  o- U
}
7 ?) {' P1 Q* z7 \$ e$ [( C" W7 ~* ?& ?5 ^0 z" R8 J
. I% Y9 t0 b- z. q+ p$ @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& i6 a7 p$ v) ^, b/* Initialize MCASP1 */
4 c0 P* k& T( k5 W    mcasp = &MCASP_MODULE_1;& y' e% X1 A, @" ^( |. X, a
    mcasp->regs->GBLCTL  = 0;       // Reset- M7 R* N" V4 M$ u
    mcasp->regs->RGBLCTL = 0;       // Reset RX
! @# z  J& K# {$ f    mcasp->regs->XGBLCTL = 0;       // Reset TX. b! Z( S, e0 P. X, F: y7 k
    mcasp->regs->PWRDEMU = 1;       // Free-running
0 T5 G- ^- l$ w/ S5 ]+ Z+ `   // configure McASP0 receive registers
, X/ ~+ }" `. O3 g    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" ]# J6 o& m: c" Q6 t! O    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: W- o- z% o; L1 _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. |. r! d; E; [! C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 W- J8 L2 A; t0 c: C! m! _6 B0 J    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 d. E3 A3 _) o+ E: \6 D9 w0 V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 ~" P4 O5 O" J& m5 H0 n. _% k
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- ?- g; c1 Z$ S  y( n" ]. H8 j    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 k% s3 j( {  b* S  w! l* w% G1 v
( @% E6 }0 l3 T' K3 O) O
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 J- h: R4 h" m+ B" V- V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 k+ q1 }( J& @* _1 W0 `    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 K4 q8 N) H8 }2 Z* V* f/ i    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 W! |: x4 `! ^1 K9 f, G) y; f1 i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' U" @! |- L# `/ P+ {% f    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 Q9 z* }2 X0 c6 i* x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% V0 Q& w1 M( d2 M# b9 t2 t- ]    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 y& f5 C6 o, h. e& }7 @
9 e. x+ H* t/ l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 ~. O0 l, a. Q  y$ K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 h% m7 ]. y, C" B/ Y" @    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 L% o% D- m- Z: l& I+ j    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ m: T3 O9 x& k6 T  {. I2 C
0 A6 V* K/ N3 n: `* z2 E$ Z
    mcasp->regs->DITCTL     = 0x00000000; // Not used4 [) p2 }7 `* u. Q4 ~. u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' _2 X/ e8 N, |# z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 A5 @: l( X) T7 A9 W0 s0 R
' \! C, }$ }. k& }( v/* Starting sections of the McASP*/1 w3 p" w0 |+ j* [
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 ]& B8 K3 `5 b1 P) K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 S; e& E& F& a' Q# z9 \! P: m
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; a/ F; @& W& f; T$ a7 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* ^( l' m. n0 h: O; V( U" j* L" A7 \6 `( P, z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! q  c  h' \" r3 N/ w: g2 k( Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- z6 e& M, A/ T; P* z% {' e( N
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. z; i# |# r6 o8 @0 w3 ?9 T- o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ f' A- Z5 E5 P" T% Z- c: F  ?) a  N# U; F" i- T
    mcasp->regs->XSTAT = 0x0000ffff;
$ I( i. s3 ~: I7 Z( i' b    mcasp->regs->RSTAT = 0x0000ffff;
! b' M( j6 \, p8 G+ A+ A3 Y! z- V5 V& n
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 v2 G8 g/ [9 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% |, ^! E% t3 \' P) m0 M0 }) }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 D" }( K: b" z- [! Z) J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' [9 H) m9 R2 I2 G1 k
" w5 M& e; z& h  P9 ]* {    /* Write a 0, so that no underrun occurs after releasing the state machine */, r3 W" R) i! o2 r  @# C0 O5 U4 U
    mcasp->regs->XBUF5 = 0;9 o) k, p9 P3 o2 `; s
    mcasp->regs->RBUF0 = 0;
) _6 ~2 u$ ^6 ?3 p8 K( w) W/ f1 T1 W; \9 |0 J: D; a% c3 i
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% v5 m9 I, q8 e9 L4 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 Q& Y0 J( O7 p! b8 l6 P. a9 w# [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; ?+ V  r; q9 e  U' d& Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" [* J9 U/ z! C# G
, j9 A( e/ E% h4 C* U- ~! @! {    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( \$ g& v& |8 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! T# H) }  V. i( Q2 o4 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 X% c' T: ?2 a* o# ~8 i) Q  J: K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ a; y+ f! L  _  N

4 Q- Q& N' J/ |; l    CSR = 0x0000;8 A) Y$ }( Z# N# M4 o$ w2 g
    INTC_INTMUX1 = 0x3d;+ |7 ~% W8 L3 m' y$ |4 B
    ISTP = (unsigned int)vectors;9 V1 o7 T5 V' h9 Y
    ICR = 0xFFF0;  0 X& D& p! o4 b: j) N, O
    IER |= 0x12;  7 R* H. D- G5 r- e
    CSR |= 0x01;  
+ `. @9 {& E5 o5 M- |1 w
4 y; v. o0 ?0 y/ C: S
! v- ?# b4 `; x0 `
6 V1 ^- V/ c/ p" c  A2 c还有就是两个输入输出函数:
, U* D; V# A; G) mvoid output_sample(Int32 out_data)
9 t; X5 p" @0 C+ `{
) r( ], Z6 S& x+ |  AIC31_data.uint = out_data;  + ]1 U. r. }% g( J. p4 ?
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* H  f7 y. h8 O) {8 ^, u
}
* K# S1 `/ U* |) R% ]) I! k$ B1 E. v. d# T4 }* z9 O
Int32 input_sample(void)6 @7 g8 ~# A. A6 @/ A
{  
( O1 Q9 Z' o: d2 F$ z* T! d* O' v  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ {: S3 C+ f2 k& t. E+ j, q/ z  return (AIC31_data.uint);
; {0 e5 K- k2 j) [0 Y- I}" ~7 k7 J, E2 X: O) ~) w" w
  D1 h. |" |" A
分享到:  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-1-14 01:11 , Processed in 0.040452 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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